diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2018 Ilya Rezvov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+The project also includes test cases from WebAssembly Test Suite without any
+modifications. WebAssembly Test Suite is distributed under Apache License 2.0.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/dist/build/Language/Wasm/Lexer.hs b/dist/build/Language/Wasm/Lexer.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/Language/Wasm/Lexer.hs
@@ -0,0 +1,1413 @@
+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}
+{-# LANGUAGE CPP,MagicHash #-}
+{-# LINE 1 "src/Language/Wasm/Lexer.x" #-}
+
+{-# LANGUAGE FlexibleContexts #-}
+
+module Language.Wasm.Lexer (
+    Lexeme(..),
+    Token(..),
+    AlexPosn(..),
+    scanner,
+    asFloat,
+    asDouble
+) where
+
+import qualified Data.ByteString.Lazy as LBS
+import qualified Data.Char as Char
+import qualified Data.ByteString.Lazy.UTF8 as LBSUtf8
+import Control.Applicative ((<$>))
+import Control.Monad (when)
+import Numeric.IEEE (infinity, nan)
+import Language.Wasm.FloatUtils (makeNaN, doubleToFloat)
+import Data.Word (Word8)
+import Data.List (isPrefixOf)
+import Text.Read (readEither)
+
+
+#if __GLASGOW_HASKELL__ >= 603
+#include "ghcconfig.h"
+#elif defined(__GLASGOW_HASKELL__)
+#include "config.h"
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+import Data.Array.Base (unsafeAt)
+#else
+import Array
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import GHC.Exts
+#else
+import GlaExts
+#endif
+{-# LINE 1 "templates/wrappers.hs" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Alex wrapper code.
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
+
+
+import Control.Applicative as App (Applicative (..))
+import qualified Control.Monad (ap)
+
+
+import Data.Word (Word8)
+
+
+import Data.Int (Int64)
+import qualified Data.Char
+import qualified Data.ByteString.Lazy     as ByteString
+import qualified Data.ByteString.Internal as ByteString (w2c)
+
+
+
+type Byte = Word8
+
+-- -----------------------------------------------------------------------------
+-- The input type
+
+
+
+
+type AlexInput = (AlexPosn,     -- current position,
+                  Char,         -- previous char
+                  ByteString.ByteString,        -- current input string
+                  Int64)           -- bytes consumed so far
+
+ignorePendingBytes :: AlexInput -> AlexInput
+ignorePendingBytes i = i   -- no pending bytes when lexing bytestrings
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar (_,c,_,_) = c
+
+alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
+alexGetByte (p,_,cs,n) =
+    case ByteString.uncons cs of
+        Nothing -> Nothing
+        Just (b, cs') ->
+            let c   = ByteString.w2c b
+                p'  = alexMove p c
+                n'  = n+1
+            in p' `seq` cs' `seq` n' `seq` Just (b, (p', c, cs',n'))
+
+
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Token positions
+
+-- `Posn' records the location of a token in the input text.  It has three
+-- fields: the address (number of chacaters preceding the token), line number
+-- and column of a token within the file. `start_pos' gives the position of the
+-- start of the file and `eof_pos' a standard encoding for the end of file.
+-- `move_pos' calculates the new position after traversing a given character,
+-- assuming the usual eight character tab stops.
+
+
+data AlexPosn = AlexPn !Int !Int !Int
+        deriving (Eq,Show)
+
+alexStartPos :: AlexPosn
+alexStartPos = AlexPn 0 1 1
+
+alexMove :: AlexPosn -> Char -> AlexPosn
+alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+alex_tab_size-1) `div` alex_tab_size)*alex_tab_size+1)
+alexMove (AlexPn a l _) '\n' = AlexPn (a+1) (l+1)   1
+alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)
+
+
+-- -----------------------------------------------------------------------------
+-- Default monad
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Monad (with ByteString input)
+
+
+data AlexState = AlexState {
+        alex_pos :: !AlexPosn,  -- position at current input location
+        alex_bpos:: !Int64,     -- bytes consumed so far
+        alex_inp :: ByteString.ByteString,      -- the current input
+        alex_chr :: !Char,      -- the character before the input
+        alex_scd :: !Int        -- the current startcode
+
+      , alex_ust :: AlexUserState -- AlexUserState will be defined in the user program
+
+    }
+
+-- Compile with -funbox-strict-fields for best results!
+
+runAlex :: ByteString.ByteString -> Alex a -> Either String a
+runAlex input__ (Alex f)
+   = case f (AlexState {alex_pos = alexStartPos,
+                        alex_bpos = 0,
+                        alex_inp = input__,
+                        alex_chr = '\n',
+
+                        alex_ust = alexInitUserState,
+
+                        alex_scd = 0}) of Left msg -> Left msg
+                                          Right ( _, a ) -> Right a
+
+newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }
+
+instance Functor Alex where
+  fmap f m = do x <- m; return (f x)
+
+instance Applicative Alex where
+  pure a = Alex $ \s -> Right (s,a)
+  (<*>) = Control.Monad.ap
+
+instance Monad Alex where
+  m >>= k  = Alex $ \s -> case unAlex m s of
+                                Left msg -> Left msg
+                                Right (s',a) -> unAlex (k a) s'
+  return = App.pure
+
+alexGetInput :: Alex AlexInput
+alexGetInput
+ = Alex $ \s@AlexState{alex_pos=pos,alex_bpos=bpos,alex_chr=c,alex_inp=inp__} ->
+        Right (s, (pos,c,inp__,bpos))
+
+alexSetInput :: AlexInput -> Alex ()
+alexSetInput (pos,c,inp__,bpos)
+ = Alex $ \s -> case s{alex_pos=pos,
+                       alex_bpos=bpos,
+                       alex_chr=c,
+                       alex_inp=inp__} of
+                  state__@(AlexState{}) -> Right (state__, ())
+
+alexError :: String -> Alex a
+alexError message = Alex $ const $ Left message
+
+alexGetStartCode :: Alex Int
+alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)
+
+alexSetStartCode :: Int -> Alex ()
+alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())
+
+alexMonadScan = do
+  inp__@(_,_,_,n) <- alexGetInput
+  sc <- alexGetStartCode
+  case alexScan inp__ sc of
+    AlexEOF -> alexEOF
+    AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)
+    AlexSkip  inp__' _len -> do
+        alexSetInput inp__'
+        alexMonadScan
+    AlexToken inp__'@(_,_,_,n') _ action -> do
+        alexSetInput inp__'
+        action (ignorePendingBytes inp__) len
+      where
+        len = n'-n
+
+-- -----------------------------------------------------------------------------
+-- Useful token actions
+
+type AlexAction result = AlexInput -> Int64 -> Alex result
+
+-- just ignore this token and scan another one
+-- skip :: AlexAction result
+skip _input _len = alexMonadScan
+
+-- ignore this token, but set the start code to a new value
+-- begin :: Int -> AlexAction result
+begin code _input _len = do alexSetStartCode code; alexMonadScan
+
+-- perform an action for this token, and set the start code to a new value
+andBegin :: AlexAction result -> Int -> AlexAction result
+(action `andBegin` code) input__ len = do
+  alexSetStartCode code
+  action input__ len
+
+token :: (AlexInput -> Int64 -> token) -> AlexAction token
+token t input__ len = return (t input__ len)
+
+
+
+-- -----------------------------------------------------------------------------
+-- Basic wrapper
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Basic wrapper, ByteString version
+
+
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Posn wrapper
+
+-- Adds text positions to the basic model.
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Posn wrapper, ByteString version
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- GScan wrapper
+
+-- For compatibility with previous versions of Alex, and because we can.
+
+
+alex_tab_size :: Int
+alex_tab_size = 8
+alex_base :: AlexAddr
+alex_base = AlexA#
+  "\xf8\xff\xff\xff\x5b\x00\x00\x00\x51\x01\x00\x00\x47\x00\x00\x00\xc8\xff\xff\xff\xd1\x01\x00\x00\x51\x02\x00\x00\xd1\x02\x00\x00\x51\x03\x00\x00\xd1\x03\x00\x00\x51\x04\x00\x00\x00\x00\x00\x00\xc2\x04\x00\x00\x00\x00\x00\x00\x33\x05\x00\x00\x00\x00\x00\x00\xa4\x05\x00\x00\x00\x00\x00\x00\xe5\x05\x00\x00\x7c\xff\xff\xff\x00\x00\x00\x00\x26\x06\x00\x00\x2c\x01\x00\x00\x00\x00\x00\x00\x67\x06\x00\x00\x7e\xff\xff\xff\x67\x07\x00\x00\x27\x07\x00\x00\x00\x00\x00\x00\x7f\xff\xff\xff\x72\xff\xff\xff\x27\x08\x00\x00\xe7\x07\x00\x00\x00\x00\x00\x00\x44\x01\x00\x00\xe7\x08\x00\x00\xa7\x08\x00\x00\x00\x00\x00\x00\x73\xff\xff\xff\x9e\x09\x00\x00\x74\xff\xff\xff\x00\x00\x00\x00\x7d\x0a\x00\x00\xd9\x0a\x00\x00\x37\x0b\x00\x00\x93\x0b\x00\x00\xf1\x0b\x00\x00\x4d\x0c\x00\x00\xab\x0c\x00\x00\x07\x0d\x00\x00\x65\x0d\x00\x00\xc1\x0d\x00\x00\x1f\x0e\x00\x00\x7b\x0e\x00\x00\xd9\x0e\x00\x00\x35\x0f\x00\x00\x93\x0f\x00\x00\xef\x0f\x00\x00\x00\x00\x00\x00\x4d\x10\x00\x00\xd0\xff\xff\xff\x00\x00\x00\x00\xa9\x10\x00\x00\x07\x11\x00\x00\x63\x11\x00\x00\xc1\x11\x00\x00\x1d\x12\x00\x00\x7b\x12\x00\x00\xd7\x12\x00\x00\x35\x13\x00\x00\x91\x13\x00\x00\x00\x00\x00\x00\xd1\xff\xff\xff\xe4\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x09\x00\x00\xef\x13\x00\x00\x4b\x14\x00\x00\xa9\x14\x00\x00\x05\x15\x00\x00\x63\x15\x00\x00\xbf\x15\x00\x00\x1d\x16\x00\x00\x79\x16\x00\x00\xd7\x16\x00\x00\x33\x17\x00\x00\x91\x17\x00\x00\xed\x17\x00\x00\x4b\x18\x00\x00\xa7\x18\x00\x00\x05\x19\x00\x00\x61\x19\x00\x00\xbf\x19\x00\x00\x1b\x1a\x00\x00\x79\x1a\x00\x00\xd5\x1a\x00\x00\x33\x1b\x00\x00\x8f\x1b\x00\x00\xed\x1b\x00\x00"#
+
+alex_table :: AlexAddr
+alex_table = AlexA#
+  "\x00\x00\x29\x00\x29\x00\x27\x00\x1e\x00\x29\x00\x26\x00\x28\x00\x5b\x00\x3b\x00\x33\x00\x47\x00\x47\x00\x4b\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x5b\x00\x4c\x00\x5b\x00\x58\x00\x5b\x00\x5b\x00\x5b\x00\x3c\x00\x3d\x00\x5b\x00\x69\x00\x00\x00\x68\x00\x5b\x00\x5b\x00\x3f\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x04\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x35\x00\x33\x00\x33\x00\x33\x00\x33\x00\x32\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x24\x00\x05\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x18\x00\x08\x00\x0f\x00\x0f\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x55\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x00\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x20\x00\x06\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x09\x00\x0d\x00\x0d\x00\x0d\x00\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x1f\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x05\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x17\x00\x06\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x07\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1c\x00\x1b\x00\x07\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x12\x00\x0a\x00\x0b\x00\x0b\x00\x0b\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x34\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x5b\x00\x33\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5c\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x1d\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5c\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x33\x00\x5b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x13\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x38\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x6c\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x33\x00\x5b\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x1d\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x13\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x39\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x13\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x36\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x37\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x38\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2f\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x2d\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x1d\x00\x00\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x2a\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x33\x00\x00\x00\x33\x00\x00\x00\x33\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x1d\x00\x00\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x5b\x00\x3b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x1d\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x42\x00\x5b\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x67\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x19\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x42\x00\x5b\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x67\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x66\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x45\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x66\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x65\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x63\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x64\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x60\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x61\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x62\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x13\x00\x00\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x3b\x00\x00\x00\x3b\x00\x5b\x00\x3b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x6e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x19\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x6d\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5f\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x6a\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x6b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x6c\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x44\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x62\x00\x00\x00\x62\x00\x5b\x00\x5b\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x46\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x64\x00\x00\x00\x64\x00\x5b\x00\x5b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x43\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x41\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x3f\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5d\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5a\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x3f\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x59\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x31\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x30\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x2e\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x2c\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x13\x00\x00\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x2b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+alex_check :: AlexAddr
+alex_check = AlexA#
+  "\xff\xff\x09\x00\x0a\x00\x3b\x00\x88\x00\x0d\x00\x88\x00\x88\x00\x96\x00\x96\x00\x96\x00\x3b\x00\x3b\x00\x29\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x22\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x09\x00\x0a\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe2\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+alex_deflt :: AlexAddr
+alex_deflt = AlexA#
+  "\xff\xff\x4a\x00\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x11\x00\x14\x00\x14\x00\x17\x00\x17\x00\x1c\x00\x1c\x00\xff\xff\x21\x00\x21\x00\xff\xff\x25\x00\x25\x00\xff\xff\x27\x00\x27\x00\x27\x00\xff\xff\xff\xff\x56\x00\x56\x00\x56\x00\xff\xff\x4a\x00\x4a\x00\x4a\x00\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+alex_accept = listArray (0 :: Int, 110)
+  [ AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccSkip
+  , AlexAcc 64
+  , AlexAcc 63
+  , AlexAcc 62
+  , AlexAcc 61
+  , AlexAcc 60
+  , AlexAcc 59
+  , AlexAcc 58
+  , AlexAcc 57
+  , AlexAcc 56
+  , AlexAcc 55
+  , AlexAcc 54
+  , AlexAcc 53
+  , AlexAcc 52
+  , AlexAcc 51
+  , AlexAcc 50
+  , AlexAcc 49
+  , AlexAccSkip
+  , AlexAcc 48
+  , AlexAcc 47
+  , AlexAcc 46
+  , AlexAcc 45
+  , AlexAcc 44
+  , AlexAcc 43
+  , AlexAcc 42
+  , AlexAcc 41
+  , AlexAcc 40
+  , AlexAcc 39
+  , AlexAcc 38
+  , AlexAcc 37
+  , AlexAcc 36
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAccSkip
+  , AlexAcc 35
+  , AlexAcc 34
+  , AlexAcc 33
+  , AlexAcc 32
+  , AlexAcc 31
+  , AlexAcc 30
+  , AlexAcc 29
+  , AlexAcc 28
+  , AlexAcc 27
+  , AlexAcc 26
+  , AlexAcc 25
+  , AlexAccPred 24 (isAllowedStringChar)(AlexAccNone)
+  , AlexAccPred 23 (isAllowedStringChar)(AlexAccNone)
+  , AlexAcc 22
+  , AlexAcc 21
+  , AlexAcc 20
+  , AlexAcc 19
+  , AlexAcc 18
+  , AlexAcc 17
+  , AlexAcc 16
+  , AlexAcc 15
+  , AlexAcc 14
+  , AlexAcc 13
+  , AlexAcc 12
+  , AlexAcc 11
+  , AlexAcc 10
+  , AlexAcc 9
+  , AlexAcc 8
+  , AlexAcc 7
+  , AlexAcc 6
+  , AlexAcc 5
+  , AlexAcc 4
+  , AlexAcc 3
+  , AlexAcc 2
+  , AlexAcc 1
+  , AlexAcc 0
+  ]
+
+alex_actions = array (0 :: Int, 65)
+  [ (64,alex_action_1)
+  , (63,alex_action_2)
+  , (62,alex_action_3)
+  , (61,alex_action_4)
+  , (60,alex_action_4)
+  , (59,alex_action_5)
+  , (58,alex_action_6)
+  , (57,alex_action_7)
+  , (56,alex_action_8)
+  , (55,alex_action_8)
+  , (54,alex_action_8)
+  , (53,alex_action_8)
+  , (52,alex_action_8)
+  , (51,alex_action_8)
+  , (50,alex_action_8)
+  , (49,alex_action_8)
+  , (48,alex_action_10)
+  , (47,alex_action_11)
+  , (46,alex_action_12)
+  , (45,alex_action_13)
+  , (44,alex_action_13)
+  , (43,alex_action_14)
+  , (42,alex_action_15)
+  , (41,alex_action_15)
+  , (40,alex_action_15)
+  , (39,alex_action_16)
+  , (38,alex_action_16)
+  , (37,alex_action_16)
+  , (36,alex_action_17)
+  , (35,alex_action_19)
+  , (34,alex_action_20)
+  , (33,alex_action_21)
+  , (32,alex_action_22)
+  , (31,alex_action_23)
+  , (30,alex_action_24)
+  , (29,alex_action_25)
+  , (28,alex_action_26)
+  , (27,alex_action_27)
+  , (26,alex_action_28)
+  , (25,alex_action_29)
+  , (24,alex_action_30)
+  , (23,alex_action_30)
+  , (22,alex_action_31)
+  , (21,alex_action_31)
+  , (20,alex_action_31)
+  , (19,alex_action_31)
+  , (18,alex_action_31)
+  , (17,alex_action_31)
+  , (16,alex_action_31)
+  , (15,alex_action_31)
+  , (14,alex_action_31)
+  , (13,alex_action_31)
+  , (12,alex_action_31)
+  , (11,alex_action_31)
+  , (10,alex_action_31)
+  , (9,alex_action_31)
+  , (8,alex_action_31)
+  , (7,alex_action_31)
+  , (6,alex_action_31)
+  , (5,alex_action_31)
+  , (4,alex_action_31)
+  , (3,alex_action_31)
+  , (2,alex_action_31)
+  , (1,alex_action_31)
+  , (0,alex_action_31)
+  ]
+
+{-# LINE 95 "src/Language/Wasm/Lexer.x" #-}
+
+
+{- Lexem Helpers -}
+
+defaultStartCode :: Int
+defaultStartCode = 0
+
+-- inner string literal character predicate
+isAllowedStringChar :: user -> AlexInput -> Int -> AlexInput -> Bool
+isAllowedStringChar _userState (_pos, _rest, inp, _) _len _nextInp =
+    let Just (char, _) = LBSUtf8.decode inp in
+    let code = Char.ord char in
+    code >= 0x20 && code /= 0x7f && char /= '"' && char /= '\\'
+
+minusNaN, inf, minusInf :: Double
+minusNaN = negate nan
+inf = infinity
+minusInf = -infinity
+
+parseSign :: (Num a) => LBS.ByteString -> ((a -> a), Int64)
+parseSign str =
+    let Just (ch, _) = LBSUtf8.decode str in
+    case ch of
+        '-' -> (negate, 1)
+        '+' -> (abs, 1)
+        otherwise -> (abs, 0)
+
+{-# SPECIALIZE parseSign :: LBS.ByteString -> ((Integer -> Integer), Int64) #-}
+{-# SPECIALIZE parseSign :: LBS.ByteString -> ((Double -> Double), Int64) #-}
+
+parseHexalSignedInt :: AlexAction Lexeme
+parseHexalSignedInt = token $ \(pos, _, s, _) len -> 
+    let (sign, slen) = parseSign s in
+    let num = readHexFromPrefix (len - 2 - slen) $ LBSUtf8.drop (2 + slen) s in
+    Lexeme (Just pos) $ TIntLit $ sign num
+
+parseNanSigned :: AlexAction Lexeme
+parseNanSigned = token $ \(pos, _, s, _) len -> 
+    let (sign, slen) = parseSign s in
+    let num = readHexFromPrefix (len - 6 - slen) $ LBSUtf8.drop (6 + slen) s in
+    Lexeme (Just pos) $ TFloatLit $ BinRep $ sign $ makeNaN $ fromIntegral num
+
+parseDecimalSignedInt :: AlexAction Lexeme
+parseDecimalSignedInt = token $ \(pos, _, s, _) len ->
+    let (sign, slen) = parseSign s in
+    let num = readDecFromPrefix (len - slen) $ LBSUtf8.drop slen s in
+    Lexeme (Just pos) $ TIntLit $ sign num
+
+parseDecFloat :: AlexAction Lexeme
+parseDecFloat = token $ \(pos, _, s, _) len ->
+    Lexeme (Just pos) $ TFloatLit $ DecRep $ filter (/= '_') $ takeChars len s
+
+expAsInt :: String -> Int
+expAsInt [] = 0
+expAsInt ('+' : rest) = expAsInt rest
+expAsInt ('-' : rest) = negate $ expAsInt rest
+expAsInt str = read str
+
+readDecFloat :: String -> Either String Float
+readDecFloat str =
+    let (sign, rest) = case str of
+            ('+':rest) -> (abs, rest)
+            ('-':rest) -> (negate, rest)
+            rest -> (abs, rest)
+    in
+    let (val, exp) = splitBy (\c -> c == 'E' || c == 'e') rest in
+    let (int, frac) = splitBy (== '.') val in
+    let nullIfEmpty str = if null str then "0" else str in
+    let expInt = expAsInt $ nullIfEmpty exp in
+    if expInt > 38
+    then Left $ "constant out of range"
+    else fmap sign $ readEither $ nullIfEmpty int ++ "." ++ nullIfEmpty frac ++ "e" ++ nullIfEmpty exp
+
+readDecDouble :: String -> Either String Double
+readDecDouble str =
+    let (sign, rest) = case str of
+            ('+':rest) -> (abs, rest)
+            ('-':rest) -> (negate, rest)
+            rest -> (abs, rest)
+    in
+    let (val, exp) = splitBy (\c -> c == 'E' || c == 'e') rest in
+    let (int, frac) = splitBy (== '.') val in
+    let nullIfEmpty str = if null str then "0" else str in
+    let expInt = expAsInt $ nullIfEmpty exp in
+    if expInt > 308
+    then Left $ "constant out of range"
+    else fmap sign $ readEither $ nullIfEmpty int ++ "." ++ nullIfEmpty frac ++ "e" ++ nullIfEmpty exp
+
+parseHexFloat :: AlexAction Lexeme
+parseHexFloat = token $ \(pos, _, s, _) len ->
+    Lexeme (Just pos) $ TFloatLit $ HexRep $ filter (/= '_') $ takeChars len s
+
+readHexFloat :: Int -> String -> String -> Either String Double
+readHexFloat expLimit restrictedPrefix str =
+    let (sign, '0':'x':rest) = case str of
+            ('+':rest) -> (abs, rest)
+            ('-':rest) -> (negate, rest)
+            rest -> (abs, rest)
+    in
+    let (val, exp) = splitBy (\c -> c == 'P' || c == 'p') rest in
+    let (int, frac) = splitBy (== '.') val in
+    let intLen = length int in
+    let expInt = expAsInt exp in
+    if int == "1" && ((restrictedPrefix `isPrefixOf` frac && expInt == expLimit - 1) || expInt >= expLimit)
+    then Left $ "constant out of range"
+    else
+        let intVal = sum $ zipWith (\i c -> readHexFromChar c * (16 ^ (intLen - i))) [1..] int in
+        Right $ sign $ (intVal + readHexFrac frac) * readHexExp exp
+    where
+        readHexExp :: String -> Double
+        readHexExp [] = 1
+        readHexExp ('+' : rest) = readHexExp rest
+        readHexExp ('-' : rest) = 1 / readHexExp rest
+        readHexExp expStr = 2 ^ read expStr
+
+        readHexFrac :: String -> Double
+        readHexFrac [] = 0
+        readHexFrac val =
+            let len = length val in
+            sum $ zipWith (\i c -> readHexFromChar c / (16 ^ i)) [1..] val
+
+asFloat :: FloatRep -> Either String Float
+asFloat (BinRep d) = Right $ doubleToFloat d
+asFloat (HexRep s) = doubleToFloat <$> readHexFloat 128 "ffffff" s
+asFloat (DecRep s) = readDecFloat s
+
+asDouble :: FloatRep -> Either String Double
+asDouble (BinRep d) = Right d
+asDouble (HexRep s) = readHexFloat 1024 "fffffffffffff8" s
+asDouble (DecRep s) = readDecDouble s
+
+startBlockComment :: AlexAction Lexeme
+startBlockComment _inp _len = do
+    depth <- getLexerCommentDepth
+    if depth <= 0
+    then do
+        alexSetStartCode blockComment
+        setLexerCommentDepth 1
+    else
+        setLexerCommentDepth (depth + 1)
+    alexMonadScan
+
+endBlockComment :: AlexAction Lexeme
+endBlockComment _inp _len = do
+    depth <- getLexerCommentDepth
+    if depth == 1
+    then do
+        alexSetStartCode defaultStartCode
+        setLexerCommentDepth 0
+    else
+        setLexerCommentDepth (depth - 1)
+    alexMonadScan
+
+startStringLiteral :: AlexAction Lexeme
+startStringLiteral _inp _len = do
+    alexSetStartCode stringLiteral
+    setLexerStringFlag True
+    alexMonadScan
+
+appendCharToStringLiteral :: Char -> AlexAction Lexeme
+appendCharToStringLiteral chr _inp _len = do
+    addCharToLexerStringValue chr
+    alexMonadScan
+
+appendFromHead :: AlexAction Lexeme
+appendFromHead (_pos, _rest, inp, _) _len = do
+    let Just (first, _) = LBSUtf8.decode inp
+    addCharToLexerStringValue first
+    alexMonadScan
+
+appendDoubleHexChar :: AlexAction Lexeme
+appendDoubleHexChar (_pos, _rest, inp, _) _len = do
+    addCharCodeToLexerStringValue $ fromIntegral $ readHexFromPrefix 2 $ LBSUtf8.drop 1 inp
+    alexMonadScan
+
+-- TODO: add a predicate with code ranges check
+-- if 𝑛 < 0xD800 ∨ 0xE000 ≤ 𝑛 < 0x110000
+appendHexEscapedChar :: AlexAction Lexeme
+appendHexEscapedChar (pos, _rest, inp, _) len = do
+    let code = readHexFromPrefix (len - 3) $ LBSUtf8.drop 2 inp
+    if code < 0xD800 || (code >= 0xE000 && code < 0x110000)
+    then do
+        addCharToLexerStringValue $ Char.chr $ fromIntegral code
+        alexMonadScan
+    else
+        alexError $ "Character code should be in valid UTF range (code < 0xD800 || (code >= 0xE000 && code < 0x110000)): " ++ show pos
+
+endStringLiteral :: AlexAction Lexeme
+endStringLiteral (pos, _, _inp, _) _len = do
+    alexSetStartCode defaultStartCode
+    setLexerStringFlag False
+    str <- LBS.pack . reverse <$> getLexerStringValue
+    setLexerStringValue []
+    return $ Lexeme (Just pos) $ TStringLit str
+
+tokenStr :: (LBS.ByteString -> Token) -> AlexAction Lexeme
+tokenStr f = token $ \(pos, _, s, _) len -> (Lexeme (Just pos) $ f $ LBS.take len s)
+
+constToken :: Token -> AlexAction Lexeme
+constToken tok = token $ \(pos, _, _, _) _len -> (Lexeme (Just pos) tok)
+
+{- End Lexem Helpers -}
+
+data FloatRep
+    = BinRep Double
+    | DecRep String
+    | HexRep String
+    deriving (Show, Eq)
+
+data Token = TKeyword LBS.ByteString
+    | TIntLit Integer
+    | TFloatLit FloatRep
+    | TStringLit LBS.ByteString
+    | TId LBS.ByteString
+    | TOpenBracket
+    | TCloseBracket
+    | TReserved LBS.ByteString
+    | EOF
+    deriving (Show, Eq)
+
+data Lexeme = Lexeme { pos :: Maybe AlexPosn, tok :: Token } deriving (Show, Eq)
+
+data AlexUserState = AlexUserState {
+        lexerCommentDepth :: Int,
+        lexerStringValue  :: [Word8],
+        lexerIsString     :: Bool
+    }
+
+alexInitUserState :: AlexUserState
+alexInitUserState = AlexUserState {
+        lexerCommentDepth  = 0,
+        lexerIsString      = False,
+        lexerStringValue   = []
+    }
+
+getLexerCommentDepth :: Alex Int
+getLexerCommentDepth = Alex $ \s@AlexState{alex_ust=ust} ->
+    Right (s, lexerCommentDepth ust)
+
+setLexerCommentDepth :: Int -> Alex ()
+setLexerCommentDepth ss = Alex $ \s ->
+    Right (s{ alex_ust=(alex_ust s){ lexerCommentDepth = ss } }, ())
+
+getLexerStringFlag :: Alex Bool
+getLexerStringFlag = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, lexerIsString ust)
+
+setLexerStringFlag :: Bool -> Alex ()
+setLexerStringFlag isString = Alex $ \s ->
+    Right (s{ alex_ust=(alex_ust s){ lexerIsString = isString } }, ())
+
+getLexerStringValue :: Alex [Word8]
+getLexerStringValue = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, lexerStringValue ust)
+
+setLexerStringValue :: [Word8] -> Alex ()
+setLexerStringValue ss = Alex $ \s ->
+    Right (s{ alex_ust=(alex_ust s){ lexerStringValue = ss } }, ())
+
+addCharToLexerStringValue :: Char -> Alex ()
+addCharToLexerStringValue c = Alex $ \s ->
+    let ust = alex_ust s in
+    Right (s{ alex_ust = ust{ lexerStringValue = (reverse $ LBS.unpack $ LBSUtf8.fromString [c]) ++ lexerStringValue ust } }, ())
+
+addCharCodeToLexerStringValue :: Word8 -> Alex ()
+addCharCodeToLexerStringValue c = Alex $ \s ->
+    let ust = alex_ust s in
+    Right (s{ alex_ust = ust{ lexerStringValue = c : lexerStringValue ust } }, ())
+
+alexEOF = return $ Lexeme Nothing EOF
+
+takeChars :: Int64 -> LBS.ByteString -> String
+takeChars n str = reverse $ go n str []
+    where
+        go :: Int64 -> LBS.ByteString -> String -> String
+        go 0 _ acc = acc
+        go n str acc = case LBSUtf8.uncons str of
+            Just (c, rest) -> go (n - 1) rest (c : acc)
+            Nothing -> acc
+
+readHexFromChar :: (Num a) => Char -> a
+readHexFromChar chr =
+    case chr of 
+        '0' -> 0 
+        '1' -> 1 
+        '2' -> 2 
+        '3' -> 3 
+        '4' -> 4 
+        '5' -> 5 
+        '6' -> 6 
+        '7' -> 7 
+        '8' -> 8 
+        '9' -> 9 
+        'A' -> 10 
+        'B' -> 11 
+        'C' -> 12 
+        'D' -> 13 
+        'E' -> 14 
+        'F' -> 15
+        'a' -> 10 
+        'b' -> 11 
+        'c' -> 12 
+        'd' -> 13 
+        'e' -> 14 
+        'f' -> 15
+        otherwise -> 0
+
+{-# SPECIALIZE readHexFromChar :: Char -> Integer #-}
+{-# SPECIALIZE readHexFromChar :: Char -> Double #-}
+
+readFromPrefix :: Int -> Int64 -> LBS.ByteString -> Integer
+readFromPrefix base n bstr
+    | base <= 16 =
+        let str = filter (/= '_') $ takeChars n bstr in
+        let len = length str in
+        sum $ zipWith (\i c -> readHexFromChar c * (fromIntegral base ^ fromIntegral (len - i))) [1..] str
+    | otherwise = error "base has to be less than or equal 16"
+
+readHexFromPrefix :: Int64 -> LBS.ByteString -> Integer
+readHexFromPrefix = readFromPrefix 16
+
+readDecFromPrefix :: Int64 -> LBS.ByteString -> Integer
+readDecFromPrefix = readFromPrefix 10
+
+splitBy :: (Char -> Bool) -> String -> (String, String)
+splitBy pred str =
+    case break pred str of
+        (left, (_ : rest)) -> (left, rest)
+        res -> res
+
+scanner :: LBS.ByteString -> Either String [Lexeme]
+scanner str = runAlex str loop
+    where
+        loop :: Alex [Lexeme]
+        loop = do
+            lex <- alexMonadScan
+            case lex of
+                Lexeme _ EOF -> do
+                    strFlag <- getLexerStringFlag
+                    when strFlag $ alexError "End of file reached before string literal end"
+                    commentDepth <- getLexerCommentDepth
+                    when (commentDepth > 0) $ alexError "End of file reached before block comment end"
+                    return [lex]
+                otherwise -> (lex :) <$> loop
+
+
+blockComment,stringLiteral :: Int
+blockComment = 1
+stringLiteral = 2
+alex_action_1 =  constToken $ TFloatLit $ BinRep (abs nan) 
+alex_action_2 =  constToken $ TFloatLit $ BinRep (abs nan) 
+alex_action_3 =  constToken $ TFloatLit $ BinRep nan 
+alex_action_4 =  parseNanSigned 
+alex_action_5 =  constToken $ TFloatLit $ BinRep inf 
+alex_action_6 =  constToken $ TFloatLit $ BinRep inf 
+alex_action_7 =  constToken $ TFloatLit $ BinRep minusInf 
+alex_action_8 =  tokenStr TKeyword 
+alex_action_10 =  tokenStr TId 
+alex_action_11 =  constToken TOpenBracket 
+alex_action_12 =  constToken TCloseBracket 
+alex_action_13 =  parseDecimalSignedInt 
+alex_action_14 =  parseHexalSignedInt 
+alex_action_15 =  parseDecFloat 
+alex_action_16 =  parseHexFloat 
+alex_action_17 =  startBlockComment 
+alex_action_19 =  endBlockComment 
+alex_action_20 =  startStringLiteral 
+alex_action_21 =  appendDoubleHexChar 
+alex_action_22 =  appendCharToStringLiteral '\x09' 
+alex_action_23 =  appendCharToStringLiteral '\x0A' 
+alex_action_24 =  appendCharToStringLiteral '\x0D' 
+alex_action_25 =  appendCharToStringLiteral '\x22' 
+alex_action_26 =  appendCharToStringLiteral '\x27' 
+alex_action_27 =  appendCharToStringLiteral '\x5C' 
+alex_action_28 =  appendHexEscapedChar 
+alex_action_29 =  endStringLiteral 
+alex_action_30 =  appendFromHead 
+alex_action_31 =  tokenStr TReserved 
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- ALEX TEMPLATE
+--
+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use
+-- it for any purpose whatsoever.
+
+-- -----------------------------------------------------------------------------
+-- INTERNALS and main scanner engine
+
+
+
+
+
+
+
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define GTE(n,m) (tagToEnum# (n >=# m))
+#define EQ(n,m) (tagToEnum# (n ==# m))
+#else
+#define GTE(n,m) (n >=# m)
+#define EQ(n,m) (n ==# m)
+#endif
+
+
+
+data AlexAddr = AlexA# Addr#
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ < 503
+uncheckedShiftL# = shiftL#
+#endif
+
+{-# INLINE alexIndexInt16OffAddr #-}
+alexIndexInt16OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow16Int# i
+  where
+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)
+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))
+        off' = off *# 2#
+#else
+  indexInt16OffAddr# arr off
+#endif
+
+
+
+
+
+{-# INLINE alexIndexInt32OffAddr #-}
+alexIndexInt32OffAddr (AlexA# arr) off =
+#ifdef WORDS_BIGENDIAN
+  narrow32Int# i
+  where
+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`
+                     (b2 `uncheckedShiftL#` 16#) `or#`
+                     (b1 `uncheckedShiftL#` 8#) `or#` b0)
+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))
+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))
+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))
+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))
+   off' = off *# 4#
+#else
+  indexInt32OffAddr# arr off
+#endif
+
+
+
+
+
+
+#if __GLASGOW_HASKELL__ < 503
+quickIndex arr i = arr ! i
+#else
+-- GHC >= 503, unsafeAt is available from Data.Array.Base.
+quickIndex = unsafeAt
+#endif
+
+
+
+
+-- -----------------------------------------------------------------------------
+-- Main lexing routines
+
+data AlexReturn a
+  = AlexEOF
+  | AlexError  !AlexInput
+  | AlexSkip   !AlexInput !Int
+  | AlexToken  !AlexInput !Int a
+
+-- alexScan :: AlexInput -> StartCode -> AlexReturn a
+alexScan input__ (I# (sc))
+  = alexScanUser undefined input__ (I# (sc))
+
+alexScanUser user__ input__ (I# (sc))
+  = case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of
+  (AlexNone, input__') ->
+    case alexGetByte input__ of
+      Nothing ->
+
+
+
+                                   AlexEOF
+      Just _ ->
+
+
+
+                                   AlexError input__'
+
+  (AlexLastSkip input__'' len, _) ->
+
+
+
+    AlexSkip input__'' len
+
+  (AlexLastAcc k input__''' len, _) ->
+
+
+
+    AlexToken input__''' len (alex_actions ! k)
+
+
+-- Push the input through the DFA, remembering the most recent accepting
+-- state it encountered.
+
+alex_scan_tkn user__ orig_input len input__ s last_acc =
+  input__ `seq` -- strict in the input
+  let
+  new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))
+  in
+  new_acc `seq`
+  case alexGetByte input__ of
+     Nothing -> (new_acc, input__)
+     Just (c, new_input) ->
+
+
+
+      case fromIntegral c of { (I# (ord_c)) ->
+        let
+                base   = alexIndexInt32OffAddr alex_base s
+                offset = (base +# ord_c)
+                check  = alexIndexInt16OffAddr alex_check offset
+
+                new_s = if GTE(offset,0#) && EQ(check,ord_c)
+                          then alexIndexInt16OffAddr alex_table offset
+                          else alexIndexInt16OffAddr alex_deflt s
+        in
+        case new_s of
+            -1# -> (new_acc, input__)
+                -- on an error, we want to keep the input *before* the
+                -- character that failed, not after.
+            _ -> alex_scan_tkn user__ orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)
+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
+                        new_input new_s new_acc
+      }
+  where
+        check_accs (AlexAccNone) = last_acc
+        check_accs (AlexAcc a  ) = AlexLastAcc a input__ (I# (len))
+        check_accs (AlexAccSkip) = AlexLastSkip  input__ (I# (len))
+
+        check_accs (AlexAccPred a predx rest)
+           | predx user__ orig_input (I# (len)) input__
+           = AlexLastAcc a input__ (I# (len))
+           | otherwise
+           = check_accs rest
+        check_accs (AlexAccSkipPred predx rest)
+           | predx user__ orig_input (I# (len)) input__
+           = AlexLastSkip input__ (I# (len))
+           | otherwise
+           = check_accs rest
+
+
+data AlexLastAcc
+  = AlexNone
+  | AlexLastAcc !Int !AlexInput !Int
+  | AlexLastSkip     !AlexInput !Int
+
+data AlexAcc user
+  = AlexAccNone
+  | AlexAcc Int
+  | AlexAccSkip
+
+  | AlexAccPred Int (AlexAccPred user) (AlexAcc user)
+  | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)
+
+type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool
+
+-- -----------------------------------------------------------------------------
+-- Predicates on a rule
+
+alexAndPred p1 p2 user__ in1 len in2
+  = p1 user__ in1 len in2 && p2 user__ in1 len in2
+
+--alexPrevCharIsPred :: Char -> AlexAccPred _
+alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__
+
+alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)
+
+--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _
+alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__
+
+--alexRightContext :: Int -> AlexAccPred _
+alexRightContext (I# (sc)) user__ _ _ input__ =
+     case alex_scan_tkn user__ input__ 0# input__ sc AlexNone of
+          (AlexNone, _) -> False
+          _ -> True
+        -- TODO: there's no need to find the longest
+        -- match when checking the right context, just
+        -- the first match will do.
+
diff --git a/dist/build/Language/Wasm/Parser.hs b/dist/build/Language/Wasm/Parser.hs
new file mode 100644
--- /dev/null
+++ b/dist/build/Language/Wasm/Parser.hs
@@ -0,0 +1,7182 @@
+{-# OPTIONS_GHC -w #-}
+{-# OPTIONS -XMagicHash -XBangPatterns -XTypeSynonymInstances -XFlexibleInstances -cpp #-}
+#if __GLASGOW_HASKELL__ >= 710
+{-# OPTIONS_GHC -XPartialTypeSignatures #-}
+#endif
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DeriveAnyClass #-}
+
+module Language.Wasm.Parser (
+    parseModule,
+    parseModuleFields,
+    parseScript,
+    desugarize,
+    ModuleField(..),
+    DataSegment(..),
+    ElemSegment(..),
+    StartFunction(..),
+    Export(..),
+    ExportDesc(..),
+    Table(..),
+    Memory(..),
+    Global(..),
+    Function(..),
+    LocalType(..),
+    Import(..),
+    ImportDesc(..),
+    Instruction(..),
+    TypeUse(..),
+    TypeDef(..),
+    PlainInstr(..),
+    Index(..),
+    Ident(..),
+    ParamType(..),
+    FuncType(..),
+    -- script
+    Script,
+    ModuleDef(..),
+    Command(..),
+    Action(..),
+    Assertion(..),
+    Meta(..)
+) where
+
+import Language.Wasm.Structure (
+        MemArg(..),
+        IUnOp(..),
+        IBinOp(..),
+        IRelOp(..),
+        FUnOp(..),
+        FBinOp(..),
+        FRelOp(..),
+        BitSize(..),
+        TableType(..),
+        ElemType(..),
+        Limit(..),
+        GlobalType(..),
+        ValueType(..)
+    )
+
+import qualified Language.Wasm.Structure as S
+
+import qualified Data.Text as T
+import qualified Data.Text.Lazy as TL
+import qualified Data.Text.Lazy.Encoding as TLEncoding
+import qualified Data.Text.Lazy.Read as TLRead
+
+import qualified Data.ByteString.Lazy as LBS
+import qualified Data.ByteString.Lazy.Char8 as LBSChar8
+import Data.Maybe (fromMaybe, fromJust, isNothing)
+import Data.List (foldl', findIndex, find)
+import Control.Monad (guard, foldM)
+
+import Numeric.Natural (Natural)
+import Data.Word (Word32, Word64)
+import Data.Bits ((.|.))
+import Numeric.IEEE (infinity, nan, maxFinite)
+import Language.Wasm.FloatUtils (doubleToFloat)
+import Control.DeepSeq (NFData)
+import GHC.Generics (Generic)
+
+import Language.Wasm.Lexer (
+        Token (
+            TKeyword,
+            TIntLit,
+            TFloatLit,
+            TStringLit,
+            TId,
+            TOpenBracket,
+            TCloseBracket,
+            TReserved,
+            EOF
+        ),
+        Lexeme(..),
+        AlexPosn(..),
+        asFloat,
+        asDouble
+    )
+import qualified Data.Array as Happy_Data_Array
+import qualified Data.Bits as Bits
+import qualified GHC.Exts as Happy_GHC_Exts
+import Control.Applicative(Applicative(..))
+import Control.Monad (ap)
+
+-- parser produced by Happy Version 1.19.8
+
+newtype HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131 = HappyAbsSyn HappyAny
+#if __GLASGOW_HASKELL__ >= 607
+type HappyAny = Happy_GHC_Exts.Any
+#else
+type HappyAny = forall a . a
+#endif
+happyIn6 :: (TL.Text) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn6 #-}
+happyOut6 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TL.Text)
+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut6 #-}
+happyIn7 :: (TL.Text) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn7 #-}
+happyOut7 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TL.Text)
+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut7 #-}
+happyIn8 :: (Ident) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn8 #-}
+happyOut8 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Ident)
+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut8 #-}
+happyIn9 :: (ValueType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn9 #-}
+happyOut9 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ValueType)
+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut9 #-}
+happyIn10 :: (Index) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn10 #-}
+happyOut10 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Index)
+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut10 #-}
+happyIn11 :: (Integer) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn11 #-}
+happyOut11 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Integer)
+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut11 #-}
+happyIn12 :: (Natural) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn12 #-}
+happyOut12 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Natural)
+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut12 #-}
+happyIn13 :: (Integer) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn13 #-}
+happyOut13 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Integer)
+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut13 #-}
+happyIn14 :: (Float) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn14 #-}
+happyOut14 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Float)
+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut14 #-}
+happyIn15 :: (Double) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn15 #-}
+happyOut15 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Double)
+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut15 #-}
+happyIn16 :: (PlainInstr) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn16 #-}
+happyOut16 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (PlainInstr)
+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut16 #-}
+happyIn17 :: (TypeUse) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn17 #-}
+happyOut17 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TypeUse)
+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut17 #-}
+happyIn18 :: (TypeUse) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn18 #-}
+happyOut18 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TypeUse)
+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut18 #-}
+happyIn19 :: (Maybe FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn19 #-}
+happyOut19 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe FuncType)
+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut19 #-}
+happyIn20 :: (TypeDef) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn20 #-}
+happyOut20 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TypeDef)
+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut20 #-}
+happyIn21 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn21 #-}
+happyOut21 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)
+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut21 #-}
+happyIn22 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn22 #-}
+happyOut22 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)
+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut22 #-}
+happyIn23 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn23 #-}
+happyOut23 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)
+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut23 #-}
+happyIn24 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn24 #-}
+happyOut24 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)
+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut24 #-}
+happyIn25 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn25 #-}
+happyOut25 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)
+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut25 #-}
+happyIn26 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn26 #-}
+happyOut26 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)
+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut26 #-}
+happyIn27 :: (FuncType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn27 #-}
+happyOut27 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (FuncType)
+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut27 #-}
+happyIn28 :: (MemArg) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn28 #-}
+happyOut28 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (MemArg)
+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut28 #-}
+happyIn29 :: (MemArg) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn29 #-}
+happyOut29 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (MemArg)
+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut29 #-}
+happyIn30 :: (MemArg) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn30 #-}
+happyOut30 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (MemArg)
+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut30 #-}
+happyIn31 :: (MemArg) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn31 #-}
+happyOut31 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (MemArg)
+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut31 #-}
+happyIn32 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn32 #-}
+happyOut32 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])
+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut32 #-}
+happyIn33 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn33 #-}
+happyOut33 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])
+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut33 #-}
+happyIn34 :: (Maybe Ident -> Either String Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn34 #-}
+happyOut34 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String Instruction)
+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut34 #-}
+happyIn35 :: (Maybe Ident -> Either String Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn35 #-}
+happyOut35 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String Instruction)
+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut35 #-}
+happyIn36 :: (Maybe Ident -> Either String Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn36 #-}
+happyOut36 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String Instruction)
+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut36 #-}
+happyIn37 :: (Maybe Ident -> Either String Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn37 #-}
+happyOut37 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String Instruction)
+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut37 #-}
+happyIn38 :: (Maybe Ident -> Either String [Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn38 #-}
+happyOut38 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String [Instruction])
+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut38 #-}
+happyIn39 :: (Maybe Ident -> Either String [Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn39 #-}
+happyOut39 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Either String [Instruction])
+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut39 #-}
+happyIn40 :: (([Instruction], Maybe Ident)) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn40 #-}
+happyOut40 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (([Instruction], Maybe Ident))
+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut40 #-}
+happyIn41 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn41 #-}
+happyOut41 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])
+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut41 #-}
+happyIn42 :: ((TypeUse, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn42 #-}
+happyOut42 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((TypeUse, [Instruction]))
+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut42 #-}
+happyIn43 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn43 #-}
+happyOut43 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))
+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut43 #-}
+happyIn44 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn44 #-}
+happyOut44 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))
+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut44 #-}
+happyIn45 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn45 #-}
+happyOut45 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))
+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut45 #-}
+happyIn46 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn46 #-}
+happyOut46 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))
+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut46 #-}
+happyIn47 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn47 #-}
+happyOut47 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])
+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut47 #-}
+happyIn48 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn48 #-}
+happyOut48 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])
+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut48 #-}
+happyIn49 :: (Maybe Ident -> Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn49 #-}
+happyOut49 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Instruction)
+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut49 #-}
+happyIn50 :: (Maybe Ident -> Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn50 #-}
+happyOut50 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Instruction)
+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut50 #-}
+happyIn51 :: (Maybe Ident -> Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn51 #-}
+happyOut51 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Instruction)
+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut51 #-}
+happyIn52 :: (Maybe Ident -> Instruction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn52 #-}
+happyOut52 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Instruction)
+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut52 #-}
+happyIn53 :: (Maybe Ident -> [Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn53 #-}
+happyOut53 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [Instruction])
+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut53 #-}
+happyIn54 :: (([Instruction], ([Instruction], [Instruction]))) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn54 #-}
+happyOut54 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (([Instruction], ([Instruction], [Instruction])))
+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut54 #-}
+happyIn55 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn55 #-}
+happyOut55 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])
+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut55 #-}
+happyIn56 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn56 #-}
+happyOut56 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])
+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut56 #-}
+happyIn57 :: ((TypeUse, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn57 #-}
+happyOut57 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((TypeUse, [Instruction]))
+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut57 #-}
+happyIn58 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn58 #-}
+happyOut58 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))
+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut58 #-}
+happyIn59 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn59 #-}
+happyOut59 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))
+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut59 #-}
+happyIn60 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn60 #-}
+happyOut60 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))
+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut60 #-}
+happyIn61 :: ((Maybe FuncType, [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn61 #-}
+happyOut61 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ((Maybe FuncType, [Instruction]))
+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut61 #-}
+happyIn62 :: (ImportDesc) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn62 #-}
+happyOut62 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ImportDesc)
+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut62 #-}
+happyIn63 :: (Import) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn63 #-}
+happyOut63 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Import)
+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut63 #-}
+happyIn64 :: (ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn64 #-}
+happyOut64 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ModuleField)
+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut64 #-}
+happyIn65 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn65 #-}
+happyOut65 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)
+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut65 #-}
+happyIn66 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn66 #-}
+happyOut66 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)
+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut66 #-}
+happyIn67 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn67 #-}
+happyOut67 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)
+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut67 #-}
+happyIn68 :: (Maybe Ident -> Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn68 #-}
+happyOut68 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> Function)
+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut68 #-}
+happyIn69 :: (Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn69 #-}
+happyOut69 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Function)
+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut69 #-}
+happyIn70 :: (Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn70 #-}
+happyOut70 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Function)
+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut70 #-}
+happyIn71 :: (Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn71 #-}
+happyOut71 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Function)
+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut71 #-}
+happyIn72 :: (Function) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn72 #-}
+happyOut72 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Function)
+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut72 #-}
+happyIn73 :: (([LocalType], [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn73 #-}
+happyOut73 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (([LocalType], [Instruction]))
+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut73 #-}
+happyIn74 :: (([LocalType], [Instruction])) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn74 #-}
+happyOut74 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (([LocalType], [Instruction]))
+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut74 #-}
+happyIn75 :: (ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn75 #-}
+happyOut75 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ModuleField)
+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut75 #-}
+happyIn76 :: (GlobalType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn76 #-}
+happyOut76 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (GlobalType)
+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut76 #-}
+happyIn77 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn77 #-}
+happyOut77 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)
+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut77 #-}
+happyIn78 :: (Maybe Ident -> ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn78 #-}
+happyOut78 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> ModuleField)
+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut78 #-}
+happyIn79 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn79 #-}
+happyOut79 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])
+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut79 #-}
+happyIn80 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn80 #-}
+happyOut80 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])
+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut80 #-}
+happyIn81 :: (LBS.ByteString) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn81 #-}
+happyOut81 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (LBS.ByteString)
+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut81 #-}
+happyIn82 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn82 #-}
+happyOut82 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])
+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut82 #-}
+happyIn83 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn83 #-}
+happyOut83 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])
+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut83 #-}
+happyIn84 :: (Limit) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn84 #-}
+happyOut84 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Limit)
+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut84 #-}
+happyIn85 :: (ElemType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn85 #-}
+happyOut85 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ElemType)
+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut85 #-}
+happyIn86 :: (TableType) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn86 #-}
+happyOut86 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (TableType)
+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut86 #-}
+happyIn87 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn87 #-}
+happyOut87 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])
+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut87 #-}
+happyIn88 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn88 #-}
+happyOut88 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])
+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut88 #-}
+happyIn89 :: (Maybe Ident -> [ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn89 #-}
+happyOut89 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Maybe Ident -> [ModuleField])
+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut89 #-}
+happyIn90 :: (ExportDesc) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn90 #-}
+happyOut90 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ExportDesc)
+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut90 #-}
+happyIn91 :: (Export) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn91 #-}
+happyOut91 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Export)
+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut91 #-}
+happyIn92 :: (StartFunction) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn92 #-}
+happyOut92 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (StartFunction)
+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut92 #-}
+happyIn93 :: ([Instruction]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn93 #-}
+happyOut93 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([Instruction])
+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut93 #-}
+happyIn94 :: (ElemSegment) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn94 #-}
+happyOut94 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ElemSegment)
+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut94 #-}
+happyIn95 :: (DataSegment) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn95 #-}
+happyOut95 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (DataSegment)
+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut95 #-}
+happyIn96 :: (ModuleField) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn96 #-}
+happyOut96 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ModuleField)
+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut96 #-}
+happyIn97 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn97 #-}
+happyOut97 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])
+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut97 #-}
+happyIn98 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn98 #-}
+happyOut98 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])
+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut98 #-}
+happyIn99 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn99 #-}
+happyOut99 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])
+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut99 #-}
+happyIn100 :: ([ModuleField]) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn100 #-}
+happyOut100 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> ([ModuleField])
+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut100 #-}
+happyIn101 :: (S.Module) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn101 #-}
+happyOut101 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (S.Module)
+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut101 #-}
+happyIn102 :: (Script) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn102 #-}
+happyOut102 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Script)
+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut102 #-}
+happyIn103 :: (Command) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn103 #-}
+happyOut103 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Command)
+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut103 #-}
+happyIn104 :: (Command) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn104 #-}
+happyOut104 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Command)
+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut104 #-}
+happyIn105 :: (ModuleDef) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn105 #-}
+happyOut105 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (ModuleDef)
+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut105 #-}
+happyIn106 :: (Action) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn106 #-}
+happyOut106 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Action)
+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut106 #-}
+happyIn107 :: (Assertion) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn107 #-}
+happyOut107 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Assertion)
+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut107 #-}
+happyIn108 :: (Either Action ModuleDef) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn108 #-}
+happyOut108 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Either Action ModuleDef)
+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut108 #-}
+happyIn109 :: (Meta) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn109 #-}
+happyOut109 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Meta)
+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut109 #-}
+happyIn110 :: t110 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn110 #-}
+happyOut110 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t110
+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut110 #-}
+happyIn111 :: t111 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn111 #-}
+happyOut111 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t111
+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut111 #-}
+happyIn112 :: t112 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn112 #-}
+happyOut112 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t112
+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut112 #-}
+happyIn113 :: t113 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn113 #-}
+happyOut113 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t113
+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut113 #-}
+happyIn114 :: t114 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn114 #-}
+happyOut114 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t114
+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut114 #-}
+happyIn115 :: t115 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn115 #-}
+happyOut115 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t115
+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut115 #-}
+happyIn116 :: t116 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn116 #-}
+happyOut116 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t116
+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut116 #-}
+happyIn117 :: t117 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn117 #-}
+happyOut117 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t117
+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut117 #-}
+happyIn118 :: t118 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn118 #-}
+happyOut118 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t118
+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut118 #-}
+happyIn119 :: t119 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn119 #-}
+happyOut119 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t119
+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut119 #-}
+happyIn120 :: t120 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn120 #-}
+happyOut120 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t120
+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut120 #-}
+happyIn121 :: t121 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn121 #-}
+happyOut121 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t121
+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut121 #-}
+happyIn122 :: t122 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn122 #-}
+happyOut122 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t122
+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut122 #-}
+happyIn123 :: t123 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn123 #-}
+happyOut123 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t123
+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut123 #-}
+happyIn124 :: t124 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn124 #-}
+happyOut124 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t124
+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut124 #-}
+happyIn125 :: t125 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn125 #-}
+happyOut125 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t125
+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut125 #-}
+happyIn126 :: t126 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn126 #-}
+happyOut126 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t126
+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut126 #-}
+happyIn127 :: t127 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn127 #-}
+happyOut127 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t127
+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut127 #-}
+happyIn128 :: t128 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn128 #-}
+happyOut128 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t128
+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut128 #-}
+happyIn129 :: t129 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn129 #-}
+happyOut129 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t129
+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut129 #-}
+happyIn130 :: t130 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn130 #-}
+happyOut130 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t130
+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut130 #-}
+happyIn131 :: t131 -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyIn131 #-}
+happyOut131 :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> t131
+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOut131 #-}
+happyInTok :: (Lexeme) -> (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131)
+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyInTok #-}
+happyOutTok :: (HappyAbsSyn t110 t111 t112 t113 t114 t115 t116 t117 t118 t119 t120 t121 t122 t123 t124 t125 t126 t127 t128 t129 t130 t131) -> (Lexeme)
+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x
+{-# INLINE happyOutTok #-}
+
+
+happyExpList :: HappyAddr
+happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x6f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x36\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\xe0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x36\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xe0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\xe0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+{-# NOINLINE happyExpListPerState #-}
+happyExpListPerState st =
+    token_strs_expected
+  where token_strs = ["error","%dummy","%start_parseModule","%start_parseModuleFields","%start_parseScript","string","name","ident","valtype","index","int32","u32","int64","float32","float64","plaininstr","typeuse","typeuse1","typedtypeuse","typedef","functype","params_results","params_results1","results","results1","paramsresultstypeuse","paramsresulttypeuse","memarg1","memarg2","memarg4","memarg8","instruction","raw_instr","raw_block","raw_block1","raw_loop","raw_loop1","raw_if_result","raw_if_result1","raw_else","raw_call_indirect","raw_call_indirect_typeuse","raw_call_indirect_functype","raw_call_indirect_functype1","raw_call_indirect_return_functype","raw_call_indirect_return_functype1","folded_instr","folded_instr1","folded_block","folded_block1","folded_loop","folded_loop1","folded_if_result","folded_then_else","folded_else","folded_call_indirect","folded_call_indirect_typeuse","folded_call_indirect_functype","folded_call_indirect_functype1","folded_call_indirect_return_functype","folded_call_indirect_return_functype1","importdesc","import","function","export_import_typeuse_locals_body","export_import_typeuse_locals_body1","import_typeuse_locals_body1","typeuse_locals_body1","signature_locals_body","signature_locals_body1","result_locals_body","result_locals_body1","locals_body","locals_body1","global","globaltype","global_type_export_import","global_mut_export_import","memory","memory_limits_export_import","datastring","memory_limits_export_import1","memory_limits","limits","elemtype","tabletype","table","limits_elemtype_elem","import_export_table","exportdesc","export","start","offsetexpr","elemsegment","datasegment","modulefield1_single","modulefield1_multi","modulefield1","modulefield","modAsFields","mod","script","command","command1","module1","action1","assertion1","assertion_trap","meta1","list__command__","list__folded_instr__","list__index__","list__instruction__","list__modulefield__","list__str__","list__string__","list__valtype__","opt__align__","opt__ident__","opt__index__","opt__offset__","opt__u32__","rev_list1__index__","rev_list__command__","rev_list__folded_instr__","rev_list__index__","rev_list__instruction__","rev_list__modulefield__","rev_list__str__","rev_list__string__","rev_list__valtype__","'('","')'","'func'","'param'","'result'","'i32'","'i64'","'f32'","'f64'","'mut'","'anyfunc'","'type'","'unreachable'","'nop'","'br'","'br_if'","'br_table'","'return'","'call'","'call_indirect'","'drop'","'select'","'get_local'","'set_local'","'tee_local'","'get_global'","'set_global'","'i32.load'","'i64.load'","'f32.load'","'f64.load'","'i32.load8_s'","'i32.load8_u'","'i32.load16_s'","'i32.load16_u'","'i64.load8_s'","'i64.load8_u'","'i64.load16_s'","'i64.load16_u'","'i64.load32_s'","'i64.load32_u'","'i32.store'","'i64.store'","'f32.store'","'f64.store'","'i32.store8'","'i32.store16'","'i64.store8'","'i64.store16'","'i64.store32'","'current_memory'","'grow_memory'","'memory.size'","'memory.grow'","'i32.const'","'i64.const'","'f32.const'","'f64.const'","'i32.clz'","'i32.ctz'","'i32.popcnt'","'i32.add'","'i32.sub'","'i32.mul'","'i32.div_s'","'i32.div_u'","'i32.rem_s'","'i32.rem_u'","'i32.and'","'i32.or'","'i32.xor'","'i32.shl'","'i32.shr_s'","'i32.shr_u'","'i32.rotl'","'i32.rotr'","'i64.clz'","'i64.ctz'","'i64.popcnt'","'i64.add'","'i64.sub'","'i64.mul'","'i64.div_s'","'i64.div_u'","'i64.rem_s'","'i64.rem_u'","'i64.and'","'i64.or'","'i64.xor'","'i64.shl'","'i64.shr_s'","'i64.shr_u'","'i64.rotl'","'i64.rotr'","'f32.abs'","'f32.neg'","'f32.ceil'","'f32.floor'","'f32.trunc'","'f32.nearest'","'f32.sqrt'","'f32.add'","'f32.sub'","'f32.mul'","'f32.div'","'f32.min'","'f32.max'","'f32.copysign'","'f64.abs'","'f64.neg'","'f64.ceil'","'f64.floor'","'f64.trunc'","'f64.nearest'","'f64.sqrt'","'f64.add'","'f64.sub'","'f64.mul'","'f64.div'","'f64.min'","'f64.max'","'f64.copysign'","'i32.eqz'","'i32.eq'","'i32.ne'","'i32.lt_s'","'i32.lt_u'","'i32.gt_s'","'i32.gt_u'","'i32.le_s'","'i32.le_u'","'i32.ge_s'","'i32.ge_u'","'i64.eqz'","'i64.eq'","'i64.ne'","'i64.lt_s'","'i64.lt_u'","'i64.gt_s'","'i64.gt_u'","'i64.le_s'","'i64.le_u'","'i64.ge_s'","'i64.ge_u'","'f32.eq'","'f32.ne'","'f32.lt'","'f32.gt'","'f32.le'","'f32.ge'","'f64.eq'","'f64.ne'","'f64.lt'","'f64.gt'","'f64.le'","'f64.ge'","'i32.wrap/i64'","'i32.trunc_s/f32'","'i32.trunc_u/f32'","'i32.trunc_s/f64'","'i32.trunc_u/f64'","'i64.extend_s/i32'","'i64.extend_u/i32'","'i64.trunc_s/f32'","'i64.trunc_u/f32'","'i64.trunc_s/f64'","'i64.trunc_u/f64'","'f32.convert_s/i32'","'f32.convert_u/i32'","'f32.convert_s/i64'","'f32.convert_u/i64'","'f32.demote/f64'","'f64.convert_s/i32'","'f64.convert_u/i32'","'f64.convert_s/i64'","'f64.convert_u/i64'","'f64.promote/f32'","'i32.reinterpret/f32'","'i64.reinterpret/f64'","'f32.reinterpret/i32'","'f64.reinterpret/i64'","'block'","'loop'","'if'","'else'","'end'","'then'","'table'","'memory'","'global'","'import'","'export'","'local'","'elem'","'data'","'offset'","'start'","'module'","'binary'","'quote'","'register'","'invoke'","'get'","'assert_return'","'assert_return_canonical_nan'","'assert_return_arithmetic_nan'","'assert_trap'","'assert_malformed'","'assert_invalid'","'assert_unlinkable'","'assert_exhaustion'","'script'","'input'","'output'","id","int","f64","offset","align","str","EOF","%eof"]
+        bit_start = st * 353
+        bit_end = (st + 1) * 353
+        read_bit = readArrayBit happyExpList
+        bits = map read_bit [bit_start..bit_end - 1]
+        bits_indexed = zip bits [0..352]
+        token_strs_expected = concatMap f bits_indexed
+        f (False, _) = []
+        f (True, nr) = [token_strs !! nr]
+
+happyActOffsets :: HappyAddr
+happyActOffsets = HappyA# "\x1a\x00\x1a\x00\x00\x00\x60\xff\x00\x00\x69\xff\x6c\xff\x51\x00\x72\xff\x2f\x00\x00\x00\x72\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xff\x8b\xff\x8b\xff\x8b\xff\x8b\xff\x95\xff\x95\xff\xeb\x00\xeb\x00\xeb\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x01\x59\x02\x18\x03\x18\x03\xf2\x00\x08\x01\x0d\x01\xa6\x04\x60\x05\x15\x06\x18\x06\x5b\x0a\x7c\x09\x7c\x09\x7c\x09\x0f\x0b\xc1\x0b\x00\x00\xc2\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x0d\xe4\x0d\x00\x00\x3d\x0f\x1e\x0f\x00\x00\xe4\x03\x02\x00\x01\x00\xad\x10\x55\x05\x85\x10\x00\x00\x00\x00\x00\x00\x00\x00\x07\x01\x00\x00\x00\x00\x00\x00\xeb\x00\xeb\x00\xeb\x00\x00\x00\xeb\x00\x15\x12\x00\x00\x00\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\xf0\x11\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x12\xff\x13\xec\x00\x10\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x14\x01\x14\x01\x14\x9a\x15\x9c\x15\xb4\x14\xa1\x15\xad\x15\xaf\x15\x00\x00\x58\x05\x00\x00\x00\x00\x00\x00\xd4\x15\xa8\xff\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x15\x19\x00\x99\x09\x99\x09\x00\x00\x00\x00\x45\x00\xfc\x14\x0c\x15\x0c\x15\x00\x00\x04\x06\x3a\x00\x3a\x00\x3a\x00\x1f\x00\x04\x06\x04\x06\x04\x06\x0c\x15\x0c\x15\x1e\x15\x09\x06\x00\x00\xf8\x15\x00\x00\x00\x00\x0d\x16\x00\x00\x1c\x16\x00\x00\x28\x16\x29\x16\x00\x00\x00\x00\x4a\x15\x4a\x15\x4a\x15\x4a\x15\x4a\x15\x38\x16\x4e\x16\x53\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x07\x74\x15\x74\x15\x74\x15\x00\x00\x00\x00\x56\x16\xb1\x06\xb1\x06\xb1\x06\xb1\x06\x2a\x00\x00\x00\x99\x04\x94\x15\x94\x15\x65\x16\x51\x0a\x00\x00\x95\x15\x95\x15\x00\x00\x00\x00\x00\x00\x95\x15\x95\x15\x00\x00\xa3\x15\x00\x00\x00\x00\x00\x00\x3d\x08\x00\x00\x29\x03\xe3\x03\x9b\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x15\x00\x00\x00\x00\x71\x15\x00\x00\x71\x15\x00\x00\x00\x00\x00\x00\x71\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x0b\x00\x00\x00\x00\x69\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x15\x00\x00\x69\x07\xd1\x15\xd1\x15\xd7\x15\x6a\x16\x00\x00\x99\x04\xde\x16\x99\x04\xdf\x16\x06\x16\xe1\x16\xe2\x16\x99\x04\xe5\x16\xe8\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x0f\x14\x16\x00\x00\x00\x00\xee\x0f\x14\x16\x00\x00\x00\x00\x00\x00\xa2\x10\x14\x16\x14\x16\x00\x00\xf2\x08\x00\x00\x00\x00\xea\x16\x11\x16\xec\x16\x00\x00\x13\x16\xee\x16\x15\x16\x00\x00\x00\x00\x00\x00\xcd\x14\x00\x00\xf0\x16\x17\x16\xf2\x16\xf3\x16\x1f\x16\x1f\x16\x1f\x16\x1f\x16\xf5\x16\xf6\x16\xf7\x16\xf8\x16\x00\x00\xf9\x16\x21\x08\xfa\x16\xfc\x16\xfd\x16\x0d\x06\xc5\x06\x00\x00\x6f\x0c\x00\x00\xfe\x16\xff\x16\x00\x00\x00\x00\x00\x00\x00\x17\x01\x17\x02\x17\x03\x17\x04\x17\x00\x00\x00\x00\x05\x17\x00\x00\x06\x17\x00\x00\x07\x17\x23\x16\x08\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x08\x00\x00\x00\x00\x56\x11\x00\x00\x00\x00\x00\x00\x0a\x12\x00\x00\x05\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x04\x33\x16\x33\x16\x0b\x17\x00\x00\x00\x00\x0c\x17\x53\x05\x00\x00\x0d\x17\x02\x00\x00\x00\x0e\x17\x0f\x17\x01\x00\x10\x17\x00\x00\x00\x00\x36\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x04\xa1\x09\x00\x00\x00\x00\x00\x00\x99\x04\x5e\x16\x00\x00\x00\x00\x00\x00\x99\x04\x62\x16\x11\x17\x12\x17\x13\x17\x00\x00\x74\x0c\x14\x17\x7d\x07\x74\x0c\x15\x17\x35\x08\x00\x00\xed\x08\x17\x17\xed\x08\x00\x00\x00\x00\x85\x0e\x00\x00\x00\x00\x19\x17\x00\x00\xbc\x01\x00\x00\x00\x00\x00\x00\x71\x02\x00\x00\x74\x0c\x00\x00\x1a\x17\x1c\x17\x1d\x17\x4b\x16\x1e\x17\x67\x16\x50\x16\x21\x17\x6b\x16\x00\x00\x22\x17\xbe\x0b\x6e\x16\x24\x17\x99\x04\x27\x17\x28\x17\x00\x00\x47\x16\x00\x00\x00\x00\x47\x16\x00\x00\x57\x05\x29\x17\x2a\x17\xe2\x03\x2b\x17\x2c\x17\x00\x00\x2d\x17\x26\x17\x30\x17\x00\x00\x00\x00\x99\x04\x00\x00\x00\x00\x00\x00\x99\x04\x31\x17\x00\x00\x00\x00\x99\x04\x32\x17\x33\x17\x34\x17\x35\x17\x36\x17\x00\x00\x78\x0c\x29\x0d\x2b\x0d\x00\x00\x37\x17\x38\x17\x00\x00\x39\x17\x3a\x17\x3b\x17\x3c\x17\x1e\x14\x99\x04\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x17\x00\x00\x69\x16\x00\x00\x57\x0c\x00\x00\x00\x00\x3f\x17\x40\x17\x41\x17\x00\x00\xde\x0d\x42\x17\xe0\x0d\x71\x16\x00\x00\x00\x00\x71\x16\x00\x00\x00\x00\x71\x16\x00\x00\x00\x00\x00\x00\x24\x0d\x00\x00\xbe\x12\x00\x00\x00\x00\x00\x00\x43\x17\x00\x00\x44\x17\x00\x00\x45\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x16\x00\x00\x8f\x16\x00\x00\x2a\x0d\x00\x00\x00\x00\x46\x17\x00\x00\x3f\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x48\x17\x4a\x17\x99\x04\x4b\x17\x3e\x0f\x4c\x17\x00\x00\x4e\x17\x43\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x0d\x00\x00\x00\x00\x72\x13\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x17\x50\x17\x00\x00\x97\x16\x00\x00\x1e\x14\x00\x00\x00\x00\x00\x00\x51\x17\x00\x00\x53\x17\x00\x00\x00\x00\x00\x00\x7e\x16\x7e\x16\x00\x00\x00\x00\x00\x00\xf0\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x17\x56\x17\x57\x17\x00\x00\x00\x00"#
+
+happyGotoOffsets :: HappyAddr
+happyGotoOffsets = HappyA# "\x98\x0f\x09\x17\xf8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x16\x00\x00\x21\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xff\x0c\x00\x17\x00\x1b\x00\x1c\x00\x1d\x00\xf8\x0f\xa8\x10\x11\x00\x14\x00\x73\x02\xe2\xff\x00\x00\x82\x15\x00\x00\xea\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x58\x17\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x16\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x10\x00\x00\x49\x00\xb9\x15\x9e\x15\x52\x17\x6f\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x44\x16\x00\x00\x00\x00\x00\x00\x76\x02\x2a\x03\x09\x00\x00\x00\x2b\x03\x3d\x17\x00\x00\x00\x00\x0e\x06\x0f\x06\xc6\x06\xc7\x06\x7e\x07\x6d\x00\x08\x00\x88\x00\x18\x00\xee\xff\xf2\xff\xfd\xff\x46\x00\xfc\xff\x16\x00\x4c\x00\x4f\x00\x93\x00\x9d\x00\x9e\x00\x9f\x00\x6e\x15\x70\x15\x39\x00\x65\x00\x44\x00\x70\x00\x6f\x15\x00\x00\x00\x00\x00\x00\x00\x00\x55\x17\x5b\x17\x5c\x17\x5a\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x00\x00\x00\x00\x0b\x00\x1b\x17\x00\x00\x00\x00\x00\x00\x0a\x17\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x17\xf4\xff\x00\x00\x20\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x17\x7e\x15\x93\x15\x00\x00\x00\x00\x3a\x16\x00\x00\x5e\x17\x5f\x17\xc1\x15\x23\x17\xbf\x15\xe3\x15\x08\x16\xa6\x15\x25\x17\x2e\x17\x2f\x17\x65\x17\x66\x17\x2c\x00\x84\x00\x00\x00\x00\x00\xff\xff\x2b\x15\x00\x00\x32\x15\x00\x00\xdc\x15\x00\x00\x00\x00\x00\x00\x00\x00\x69\x17\x6d\x17\x6e\x17\x6f\x17\x70\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x15\x00\x00\x43\x15\x47\x17\x2d\x00\x2e\x00\x31\x00\x24\x16\x2d\x16\x00\x00\x7f\x07\x36\x08\x37\x08\xee\x08\x49\x17\x00\x00\x71\x17\xac\x10\x5c\x11\x00\x00\x87\x16\x00\x00\x5e\x11\x60\x11\xb2\x15\x00\x00\x00\x00\x10\x12\x12\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x17\x00\x00\x84\x16\x82\x16\x8a\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x16\x00\x00\x00\x00\x4d\x17\x00\x00\x59\x17\x00\x00\x00\x00\x00\x00\x5d\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x16\x00\x00\x00\x00\xef\x08\x00\x00\x00\x00\x2e\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\xfb\xff\x52\x0a\x14\x12\xc4\x12\x04\x00\x00\x00\x00\x00\x72\x17\x00\x00\x73\x17\x00\x00\xc6\x12\x00\x00\x00\x00\x74\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x16\x39\x16\x53\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x16\x00\x00\x90\x15\x32\x00\x3f\x16\x00\x00\x16\x16\x33\x00\x40\x16\x00\x00\x00\x00\x8e\x15\x34\x00\x35\x00\x00\x00\xfc\x00\x00\x00\x42\x16\x00\x00\xc8\x12\x00\x00\x00\x00\x00\x00\x00\x00\x78\x13\x00\x00\x00\x00\x00\x00\x19\x16\x00\x00\x00\x00\x7a\x13\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x0b\x00\x00\x62\x17\x00\x00\x97\x15\x4d\x16\x00\x00\xfb\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x16\x00\x00\x00\x00\x00\x00\x43\x16\x4c\x16\x0a\x0b\x48\x16\x00\x00\x4b\x00\x00\x00\x49\x16\x00\x00\x8b\x15\x00\x00\x1a\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x4d\x00\x84\x15\x67\x17\x00\x00\x4a\x16\x00\x00\x4a\x00\x00\x00\x00\x00\xc4\x15\x00\x00\x00\x00\x00\x00\xa4\x15\x00\x00\x00\x00\x00\x00\x05\x00\x4f\x16\x00\x00\x51\x16\x00\x00\x54\x16\x77\x17\x60\x17\x00\x00\x00\x00\x59\x16\x79\x17\x00\x00\x00\x00\x00\x00\x5a\x16\x7a\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x17\x00\x00\x88\x15\x64\x17\x00\x00\x87\x15\x00\x00\x83\x15\x00\x00\x85\x15\x5b\x16\x00\x00\x81\x15\x00\x00\x00\x00\x75\x17\x00\x00\x8c\x15\x00\x00\x5c\x16\x00\x00\x8d\x15\x00\x00\x68\x17\x00\x00\x6a\x17\x76\x17\x6b\x17\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x17\x00\x00\x00\x00\x7b\x17\x00\x00\x00\x00\x00\x00\xbd\x15\x00\x00\x00\x00\x4e\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x1f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x17\x5d\x16\x60\x16\x00\x00\x80\x17\x00\x00\x63\x16\x00\x00\x81\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7d\x17\x7e\x17\x7f\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x16\x82\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x61\x16\xbf\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x17\x00\x00\x83\x17\x3f\x00\x00\x00\x64\x16\x40\x00\x66\x16\x00\x00\x41\x00\x6c\x16\x00\x00\x00\x00\x5f\x16\x00\x00\x09\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x17\x00\x00\x00\x00\x85\x17\x00\x00\x87\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x17\x00\x00\x8a\x17\x00\x00\x00\x00\x00\x00\x88\x17\x00\x00\x6d\x16\x00\x00\x6f\x16\x00\x00\x1d\x16\x00\x00\x00\x00\x89\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x17\x00\x00\x00\x00\x00\x00\x42\x00\x43\x00\x00\x00\x00\x00\x00\x00\x68\x13\x00\x00\x00\x00\x70\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int#
+happyAdjustOffset off = off
+
+happyDefActions :: HappyAddr
+happyDefActions = HappyA# "\x00\x00\x00\x00\x64\xfe\x00\x00\xfc\xff\x00\x00\x00\x00\x79\xfe\x00\x00\x00\x00\x94\xfe\x00\x00\xa3\xfe\xa2\xfe\x9d\xfe\x9c\xfe\x9a\xfe\x9b\xfe\xa1\xfe\xa0\xfe\x9f\xfe\x9e\xfe\x99\xfe\x98\xfe\x5c\xfe\x6e\xfe\x6e\xfe\x6e\xfe\x6e\xfe\x6e\xfe\x00\x00\x00\x00\x6c\xfe\x6c\xfe\x00\x00\x5c\xfe\x65\xfe\x00\x00\x93\xfe\x5c\xfe\x92\xfe\x91\xfe\x8f\xfe\x8e\xfe\x8d\xfe\x6e\xfe\x00\x00\x6e\xfe\x6e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x6e\xfe\x6e\xfe\x00\x00\x75\xfe\xf4\xff\x00\x00\xf5\xff\xfa\xff\xf2\xff\x6d\xfe\x00\x00\x00\x00\xfb\xff\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\xfe\x29\xff\x5e\xfe\xe0\xfe\x00\x00\xdf\xfe\xec\xff\xeb\xff\x00\x00\x00\x00\x00\x00\xe7\xff\x00\x00\x12\xff\xe5\xff\xe4\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\x6a\xfe\xc7\xff\xc6\xff\xc5\xff\xc4\xff\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xac\xff\xab\xff\xaa\xff\xa9\xff\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\xa0\xff\x9f\xff\x9e\xff\x9d\xff\x9c\xff\x9b\xff\x9a\xff\x99\xff\x98\xff\x97\xff\x96\xff\x95\xff\x94\xff\x93\xff\x92\xff\x91\xff\x90\xff\x8f\xff\x8e\xff\x8d\xff\x8c\xff\x8b\xff\x8a\xff\x89\xff\x88\xff\x87\xff\x86\xff\x85\xff\x84\xff\x83\xff\x82\xff\x81\xff\x80\xff\x7f\xff\x7e\xff\x7d\xff\x7c\xff\x7b\xff\x7a\xff\x79\xff\x78\xff\x77\xff\x76\xff\x75\xff\x74\xff\x73\xff\x72\xff\x71\xff\x70\xff\x6f\xff\x6e\xff\x6d\xff\x6c\xff\x6b\xff\x6a\xff\x69\xff\x68\xff\x67\xff\x66\xff\x65\xff\x64\xff\x63\xff\x62\xff\x61\xff\x60\xff\x5f\xff\x5e\xff\x5d\xff\x5c\xff\x5b\xff\x5a\xff\x59\xff\x58\xff\x57\xff\x56\xff\x55\xff\x54\xff\x53\xff\x52\xff\x51\xff\x50\xff\x4f\xff\x4e\xff\x4d\xff\x4c\xff\x4b\xff\x4a\xff\x49\xff\x48\xff\x47\xff\x46\xff\x45\xff\x6e\xfe\x6e\xfe\x6e\xfe\x00\x00\x00\x00\x68\xfe\x00\x00\x00\x00\x00\x00\xb3\xfe\x00\x00\xb5\xfe\xbe\xfe\xbd\xfe\x00\x00\x00\x00\x5e\xfe\xc6\xfe\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xfe\x5d\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x5c\xfe\x89\xfe\x00\x00\x5a\xfe\x58\xfe\x00\x00\x62\xfe\x00\x00\x62\xfe\x00\x00\x00\x00\x7d\xfe\x7e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\xfe\x97\xfe\x62\xfe\xa6\xfe\x5a\xfe\x00\x00\x6e\xfe\x6e\xfe\x6e\xfe\x62\xfe\x60\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x76\xfe\xbc\xfe\x00\x00\x00\x00\x5a\xfe\xb7\xfe\xb0\xfe\x00\x00\x00\x00\xb2\xfe\x00\x00\xb4\xfe\x69\xfe\xb6\xfe\x00\x00\x3e\xff\x00\x00\x00\x00\x00\x00\xc0\xff\xee\xff\xed\xff\xc1\xff\xf0\xff\xef\xff\xc2\xff\xf1\xff\xc3\xff\xf3\xff\xc8\xff\x70\xfe\x6b\xfe\xc9\xff\x70\xfe\xca\xff\x70\xfe\xcb\xff\xcc\xff\xcd\xff\x70\xfe\xce\xff\xcf\xff\xd0\xff\xd1\xff\xd2\xff\xd3\xff\xd4\xff\xd5\xff\xd6\xff\xd7\xff\xd8\xff\xd9\xff\xda\xff\xdb\xff\xdc\xff\xdd\xff\xde\xff\xdf\xff\xe0\xff\xe1\xff\xe2\xff\xe3\xff\x28\xff\x00\x00\xe6\xff\x66\xfe\xe8\xff\xe9\xff\xea\xff\x5e\xfe\xdd\xfe\xdb\xfe\xd9\xfe\xd7\xfe\xd2\xfe\xcd\xfe\x56\xfe\x56\xfe\x00\x00\x00\x00\x00\x00\x56\xfe\x00\x00\xde\xfe\x00\x00\x00\x00\x72\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\xfe\x13\xff\x10\xff\x0c\xff\x08\xff\x56\xfe\x56\xfe\x00\x00\x2c\xff\x71\xfe\x2f\xff\x2e\xff\x2d\xff\x5e\xfe\x27\xff\x00\x00\x6e\xfe\x5e\xfe\x26\xff\x00\x00\x6e\xfe\x5e\xfe\x25\xff\x1a\xff\x00\x00\x6e\xfe\x6e\xfe\x3d\xff\x00\x00\x3c\xff\x60\xfe\x00\x00\x00\x00\x00\x00\xbb\xfe\x74\xfe\x00\x00\x00\x00\x5f\xfe\x2b\xff\x2a\xff\x00\x00\xc3\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x6e\xfe\x6e\xfe\x6e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xfe\x00\x00\x77\xfe\x00\x00\x78\xfe\x00\x00\x00\x00\x00\x00\x05\xff\x00\x00\xf1\xfe\x00\x00\x00\x00\x7a\xfe\x7b\xfe\x7c\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\xfe\x85\xfe\x00\x00\x87\xfe\x00\x00\x90\xfe\x00\x00\x73\xfe\x00\x00\x8a\xfe\x8c\xfe\x59\xfe\x8b\xfe\x88\xfe\x86\xfe\x83\xfe\x82\xfe\x81\xfe\x80\xfe\x7f\xfe\x06\xff\xa4\xfe\x62\xfe\xf0\xfe\xee\xfe\xea\xfe\x56\xfe\x56\xfe\x00\x00\x5e\xfe\x04\xff\x00\x00\x01\xff\x5e\xfe\x03\xff\x00\x00\xfc\xfe\x00\x00\x63\xfe\xa7\xfe\x61\xfe\xa5\xfe\xad\xfe\xac\xfe\xab\xfe\xaa\xfe\x00\x00\x00\x00\x00\x00\x43\xff\xe1\xfe\x5e\xfe\x00\x00\x00\x00\x07\xff\x00\x00\x00\x00\x5b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x3b\xff\x38\xff\x56\xfe\x56\xfe\x15\xff\x5e\xfe\x18\xff\x5e\xfe\x00\x00\x00\x00\x1f\xff\x1d\xff\x5e\xfe\x00\x00\x00\x00\x24\xff\x22\xff\x5e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\xfe\x00\x00\x00\x00\x00\x00\x5e\xfe\xc9\xfe\x00\x00\xcc\xfe\xdc\xfe\x43\xff\xd8\xfe\x00\x00\xd6\xfe\x5e\xfe\xce\xfe\x00\x00\xd1\xfe\x00\x00\xd4\xfe\x0e\xff\x0a\xff\x0e\xff\x6e\xfe\x00\x00\x00\x00\x6e\xfe\x00\x00\x00\x00\x19\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xfe\x00\x00\xb8\xfe\xba\xfe\x00\x00\xc0\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\xfe\x00\x00\x00\x00\x00\x00\x02\xff\xf6\xfe\x00\x00\x5e\xfe\x5e\xfe\xfb\xfe\x00\x00\x00\x00\x5e\xfe\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xfe\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x00\x00\xfa\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xfe\xe3\xfe\xe4\xfe\x44\xff\x41\xff\x33\xff\x56\xfe\x56\xfe\x00\x00\xe5\xfe\xc1\xfe\x00\x00\x00\x00\x00\x00\xb1\xfe\x00\x00\x00\x00\x00\x00\x6e\xfe\x16\xff\x5e\xfe\x6e\xfe\x5e\xfe\x1e\xff\x6e\xfe\x5e\xfe\x23\xff\x11\xff\x00\x00\x09\xff\x00\x00\x0d\xff\xd3\xfe\xd0\xfe\x00\x00\xd5\xfe\x00\x00\xca\xfe\x00\x00\xc8\xfe\xcb\xfe\xda\xfe\xcf\xfe\x0b\xff\x0f\xff\x00\x00\x20\xff\x00\x00\x1b\xff\x00\x00\x14\xff\x35\xff\x00\x00\x37\xff\x00\x00\x3a\xff\xaf\xfe\xb9\xfe\xbf\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\xfe\x00\x00\x00\x00\xf8\xfe\x5e\xfe\xfd\xfe\x5e\xfe\xef\xfe\x00\x00\xec\xfe\xe7\xfe\x00\x00\xe8\xfe\xeb\xfe\xe9\xfe\xed\xfe\x00\x00\x00\x00\xf5\xfe\x00\x00\xf3\xfe\x00\x00\xc4\xfe\x34\xff\x32\xff\x00\x00\x30\xff\x3f\xff\x39\xff\x36\xff\x17\xff\x6e\xfe\x6e\xfe\x21\xff\x1c\xff\x42\xff\x00\x00\x31\xff\xf7\xfe\x5e\xfe\xf9\xfe\xfe\xfe\x00\x00\x40\xff\x00\x00\xf2\xfe"#
+
+happyCheck :: HappyAddr
+happyCheck = HappyA# "\xff\xff\x03\x00\x01\x00\x01\x00\x16\x00\x02\x00\x02\x00\x02\x00\x16\x00\x02\x00\x0c\x00\x02\x00\x0b\x00\x04\x00\x02\x00\x06\x00\x0a\x00\x06\x00\x16\x00\x02\x00\x17\x00\x04\x00\x02\x00\x06\x00\x04\x00\x02\x00\x06\x00\x01\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02\x00\x19\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0c\x00\x16\x00\x03\x00\x02\x00\x02\x00\x02\x00\x19\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0c\x00\xdc\x00\x03\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0c\x00\xde\x00\x03\x00\xdd\x00\x4b\x00\x6c\x00\x03\x00\x03\x00\x6c\x00\x16\x00\xde\x00\x0c\x00\x01\x00\x06\x00\x06\x00\x0a\x00\x6c\x00\x03\x00\x60\x00\x7a\x00\x16\x00\x6b\x00\x7a\x00\x17\x00\x03\x00\x6b\x00\x68\x00\x73\x00\xd7\x00\x17\x00\x7a\x00\x73\x00\x17\x00\xbf\x00\xc0\x00\x79\x00\x6f\x00\xc3\x00\x6d\x00\x79\x00\x76\x00\x73\x00\x73\x00\xdc\x00\x6f\x00\x6f\x00\x6f\x00\x2a\x00\x6f\x00\x2c\x00\x7d\x00\x0a\x00\x7b\x00\x73\x00\x17\x00\x71\x00\x75\x00\x74\x00\x7d\x00\x7d\x00\x7d\x00\x72\x00\x7d\x00\x18\x00\x72\x00\x17\x00\x71\x00\x73\x00\x1b\x00\x73\x00\x71\x00\x71\x00\x71\x00\x71\x00\x47\x00\x47\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x46\x00\x4e\x00\x4e\x00\x71\x00\x71\x00\x71\x00\x18\x00\x46\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x3b\x00\x18\x00\x73\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x71\x00\x18\x00\x18\x00\x73\x00\x19\x00\x73\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x73\x00\xc2\x00\xc3\x00\x73\x00\xc5\x00\xc6\x00\xbf\x00\xc0\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xbc\x00\xbd\x00\xbe\x00\x73\x00\xd8\x00\xd8\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x73\x00\xc2\x00\xc3\x00\x73\x00\xc5\x00\xc6\x00\xbc\x00\xbd\x00\xbe\x00\xca\x00\xcb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x6c\x00\xc2\x00\xc3\x00\x01\x00\xc5\x00\xc6\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x73\x00\xc2\x00\xc3\x00\x7a\x00\xc5\x00\xc6\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\x73\x00\xc2\x00\xc3\x00\x01\x00\xc5\x00\x04\x00\x05\x00\x11\x00\x01\x00\x13\x00\x73\x00\x73\x00\x73\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\xd7\x00\xd8\x00\xd8\x00\xd9\x00\xbf\x00\xc0\x00\xc1\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x02\x00\x05\x00\x04\x00\x02\x00\x06\x00\x04\x00\xd7\x00\x06\x00\xc1\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x0c\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\xc1\x00\x14\x00\x15\x00\xdc\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\x01\x00\x01\x00\x04\x00\x05\x00\xd8\x00\xd9\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0c\x00\xd7\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\xba\x00\x01\x00\x06\x00\x07\x00\x08\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x01\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\xba\x00\x01\x00\x02\x00\x01\x00\x06\x00\x07\x00\x08\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x01\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x01\x00\xbf\x00\xc0\x00\x01\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\xca\x00\xcb\x00\xc7\x00\xc8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x01\x00\x02\x00\xd7\x00\xd8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x01\x00\x02\x00\xd7\x00\xd8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x02\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x04\x00\x05\x00\xd7\x00\xd8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\xd7\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\xb9\x00\xba\x00\x01\x00\xc4\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x02\x00\x02\x00\x04\x00\x04\x00\x06\x00\x06\x00\x02\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\xbb\x00\x02\x00\x01\x00\x04\x00\x02\x00\x06\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\x01\x00\x02\x00\xb9\x00\xba\x00\x01\x00\x02\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\x01\x00\x02\x00\x01\x00\x02\x00\xd7\x00\xd8\x00\x01\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x04\x00\x05\x00\x01\x00\x02\x00\x01\x00\x02\x00\xb9\x00\xba\x00\x01\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x01\x00\x05\x00\x01\x00\x02\x00\x04\x00\x05\x00\x01\x00\x02\x00\xc1\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x04\x00\x05\x00\x5e\x00\x5f\x00\x00\x00\x01\x00\xdc\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\xdd\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x01\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\xda\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x05\x00\x00\x00\x01\x00\x00\x00\x01\x00\x14\x00\x15\x00\xd8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xd8\x00\xd7\x00\xbb\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x18\x00\x18\x00\x0a\x00\x19\x00\x06\x00\x0a\x00\xd8\x00\x0a\x00\x4b\x00\x0a\x00\x0e\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x6e\x00\x0a\x00\x69\x00\x02\x00\x0a\x00\x1b\x00\x03\x00\x1b\x00\x0a\x00\x1b\x00\x1b\x00\x06\x00\x1b\x00\x1c\x00\x7c\x00\x2a\x00\x77\x00\x06\x00\x2a\x00\x0b\x00\x1d\x00\x01\x00\x21\x00\x6d\x00\x02\x00\x1b\x00\x2a\x00\x0e\x00\x2a\x00\x2a\x00\x2a\x00\x2a\x00\x2e\x00\x2a\x00\x39\x00\x3a\x00\x2a\x00\x7b\x00\x06\x00\x37\x00\x01\x00\x3b\x00\x06\x00\x2d\x00\x44\x00\x43\x00\x45\x00\x43\x00\x41\x00\x06\x00\x49\x00\x40\x00\x0e\x00\x42\x00\x42\x00\x44\x00\x44\x00\x4e\x00\x51\x00\x50\x00\x57\x00\x02\x00\x55\x00\x56\x00\xdd\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x39\x00\x3a\x00\x73\x00\x73\x00\x73\x00\x62\x00\x63\x00\x64\x00\x65\x00\xdc\x00\x67\x00\x57\x00\x45\x00\x4e\x00\x4f\x00\x50\x00\x49\x00\x52\x00\x0e\x00\x4e\x00\x4f\x00\x50\x00\xd7\x00\x52\x00\x51\x00\x39\x00\x3a\x00\x02\x00\x55\x00\x56\x00\x4b\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x4a\x00\x45\x00\x0a\x00\x4d\x00\x4e\x00\x49\x00\x63\x00\x64\x00\x4e\x00\x66\x00\x50\x00\x4a\x00\x02\x00\x51\x00\x4d\x00\x4e\x00\x0a\x00\x55\x00\x56\x00\x0e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x39\x00\x3a\x00\x02\x00\x6d\x00\x0a\x00\x60\x00\x63\x00\x0a\x00\x0a\x00\x2a\x00\xdc\x00\x0a\x00\x45\x00\x68\x00\x02\x00\x02\x00\x49\x00\x7b\x00\x33\x00\x0e\x00\x35\x00\x28\x00\x37\x00\x2a\x00\x51\x00\x1f\x00\x0a\x00\x76\x00\x55\x00\x56\x00\x02\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x2a\x00\x39\x00\x3a\x00\x2a\x00\x2a\x00\x69\x00\x63\x00\x2a\x00\x0e\x00\x2f\x00\x30\x00\xd7\x00\xdb\x00\x45\x00\x0a\x00\x0a\x00\x02\x00\x49\x00\x35\x00\x77\x00\x37\x00\x02\x00\x2a\x00\x0a\x00\x02\x00\x51\x00\x39\x00\x3a\x00\x30\x00\x55\x00\x56\x00\x69\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xc2\x00\x45\x00\x02\x00\x1b\x00\x0a\x00\x49\x00\x63\x00\x02\x00\x77\x00\x2a\x00\x2a\x00\xdc\x00\xdc\x00\x51\x00\x39\x00\x3a\x00\x30\x00\x55\x00\x56\x00\x2b\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x0a\x00\x45\x00\x3c\x00\x3d\x00\x3e\x00\x49\x00\x40\x00\x26\x00\x42\x00\x28\x00\x44\x00\x2a\x00\xd7\x00\x51\x00\x0a\x00\x69\x00\x0a\x00\x55\x00\x56\x00\x0a\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x6a\x00\x24\x00\x6b\x00\x26\x00\x77\x00\x28\x00\x1b\x00\x2a\x00\x1b\x00\x1e\x00\x1a\x00\x1b\x00\x6f\x00\x20\x00\x78\x00\x22\x00\x79\x00\x6f\x00\x6b\x00\x6b\x00\x6b\x00\x6a\x00\xdc\x00\xd7\x00\x69\x00\x29\x00\x7d\x00\x6f\x00\x6b\x00\x6b\x00\x6b\x00\x7d\x00\x79\x00\x79\x00\x79\x00\x78\x00\x6f\x00\x6b\x00\x77\x00\x6f\x00\x6b\x00\x7d\x00\x79\x00\x79\x00\x79\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x7d\x00\x79\x00\x6b\x00\x7d\x00\x79\x00\x6b\x00\x6b\x00\x6f\x00\x6b\x00\x79\x00\x79\x00\x79\x00\x79\x00\x79\x00\x6b\x00\x6b\x00\x79\x00\x6b\x00\x6b\x00\x79\x00\x79\x00\x7d\x00\x79\x00\x02\x00\x02\x00\xdc\x00\x02\x00\x02\x00\x79\x00\x79\x00\x02\x00\x79\x00\x79\x00\x02\x00\xd7\x00\x02\x00\xdc\x00\x02\x00\xdc\x00\x02\x00\xdc\x00\x02\x00\xdc\x00\x02\x00\x02\x00\xd7\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\x01\x00\xdc\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\xd8\x00\x01\x00\xd7\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\xba\x00\x02\x00\x01\x00\x01\x00\xba\x00\x01\x00\x01\x00\xd8\x00\x02\x00\xba\x00\xd7\x00\x02\x00\x02\x00\xba\x00\x02\x00\xd7\x00\xba\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x0a\x00\x01\x00\xba\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x01\x00\xd7\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\xd7\x00\xba\x00\x02\x00\x05\x00\x02\x00\x02\x00\x02\x00\x01\x00\xb9\x00\x02\x00\x02\x00\x02\x00\x01\x00\xd7\x00\x02\x00\x01\x00\x00\x00\x02\x00\x05\x00\x70\x00\x61\x00\x53\x00\x00\x00\x00\x00\x23\x00\x0f\x00\x07\x00\x09\x00\x08\x00\x00\x00\x00\x00\x5e\x00\x48\x00\x00\x00\x4f\x00\x4c\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x0b\x00\x5d\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x32\x00\x03\x00\xff\xff\x03\x00\x03\x00\x03\x00\x03\x00\x0b\x00\x38\x00\x22\x00\x03\x00\x03\x00\x03\x00\xff\xff\x64\x00\xff\xff\x64\x00\xff\xff\x29\x00\x03\x00\xff\xff\x22\x00\x25\x00\x25\x00\xff\xff\x64\x00\x64\x00\x10\x00\x12\x00\xff\xff\x10\x00\x13\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x15\x00\xff\xff\xff\xff\x3f\x00\x3f\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\xff\xff\x34\x00\x36\x00\xff\xff\xff\xff\xff\xff\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#
+
+happyTable :: HappyAddr
+happyTable = HappyA# "\x00\x00\x1a\x00\x0a\x01\x0f\x01\x8b\x01\xb2\x01\xab\x01\x7e\x02\x8a\x01\xec\x02\x1b\x00\x3e\x00\x0b\x01\x98\x01\x49\x00\x40\x00\x54\x01\x63\x01\x87\x01\x3e\x00\x89\x01\x43\x00\x3e\x00\x40\x00\x43\x00\x49\x00\x40\x00\x0a\x00\x4e\x01\x49\x00\x49\x00\x49\x00\x49\x00\x8e\x01\x1a\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x1b\x00\x86\x01\xe5\x01\x49\x00\x49\x00\x49\x00\x8c\x01\x1a\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x1b\x00\x05\x00\x1a\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x1b\x00\xff\xff\x1a\x00\x27\x00\x09\x02\x4f\x00\x0f\x01\x0f\x01\x3c\x00\x7c\x01\xff\xff\x1b\x00\x26\x00\x04\x01\x04\x01\x43\x01\x2d\x01\x8d\x02\x05\x00\x3d\x00\x79\x01\xa9\x01\x3d\x00\x88\x01\x8d\x02\x56\x01\x06\x00\x7a\x01\x42\x00\x85\x01\x3d\x00\x7a\x01\x84\x01\x5a\x01\x5b\x01\x57\x01\xb1\x01\x5c\x01\xd7\x01\x57\x01\x07\x00\x7a\x01\x78\x01\x05\x00\xb3\x01\xac\x01\x7f\x02\x99\x02\xed\x02\x9a\x02\xad\x01\x51\x00\xd8\x01\x7e\x01\x7b\x01\x4e\x00\x99\x01\x64\x01\xad\x01\xad\x01\xad\x01\x45\x00\xad\x01\x8f\x01\x44\x00\x77\x01\x4d\x00\x7a\x01\x52\x00\x7e\x01\x4c\x00\x4b\x00\x4a\x00\x2c\x01\x10\x01\x86\x02\x2a\x01\x29\x01\x20\x01\x1f\x01\x1e\x01\x69\x01\x68\x01\x67\x01\x8e\x02\x8c\x02\xbb\x02\x31\x01\xf3\x01\xf2\x01\x8d\x01\xba\x02\xf1\x01\x4e\x02\x49\x02\x44\x02\x43\x02\x32\x02\x31\x02\x30\x02\x53\x00\x83\x01\x7a\x01\x2f\x02\xc9\x02\xc6\x02\xe1\x02\xdf\x02\xdd\x02\x12\x03\x11\x03\x82\x01\x81\x01\x7a\x01\x80\x01\x78\x01\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x78\x01\x21\x00\x22\x00\x78\x01\x23\x00\x2e\x00\x55\x01\x56\x01\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x4f\x01\x50\x01\x51\x01\x78\x01\x43\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x75\x01\x21\x00\x22\x00\x78\x01\x23\x00\x2e\x00\xe6\x01\xe7\x01\xe8\x01\x30\x00\x31\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x2e\x01\x21\x00\x22\x00\x29\x01\x23\x00\x24\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x75\x01\x21\x00\x22\x00\x3d\x00\x23\x00\x2e\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x75\x01\x21\x00\x22\x00\x28\x01\x23\x00\xa4\x01\xa5\x01\x3f\x02\x27\x01\x40\x02\x75\x01\x75\x01\x7e\x01\xa6\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xa4\x01\xa5\x01\x42\x00\x43\x00\x6f\x01\x70\x01\xa7\x01\xa8\x01\xa9\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x3e\x00\xa5\x01\x3f\x00\x3e\x00\x40\x00\x9b\x01\x42\x00\x40\x00\xa9\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xce\x01\xb2\x02\x3e\x00\x3e\x00\x9a\x01\x97\x01\x40\x00\x40\x00\xa9\x01\xb3\x02\xb4\x02\x05\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\xcf\x01\xd0\x01\xc9\x01\x12\x01\xb6\x02\xb7\x02\x6c\x01\x6d\x01\x13\x01\x14\x01\x15\x01\x16\x01\xb8\x02\x42\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\xc5\x01\xca\x01\x90\x02\x13\x01\x14\x01\x15\x01\x16\x01\x13\x01\x14\x01\x15\x01\x16\x01\x26\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x12\x01\xc6\x01\x55\x00\x56\x00\x90\x02\x13\x01\x14\x01\x15\x01\x16\x01\x13\x01\x14\x01\x15\x01\x16\x01\x25\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x25\x02\x26\x02\x3e\x00\x3e\x00\x94\x01\x93\x01\x40\x00\x40\x00\x24\x01\x5f\x01\x60\x01\x23\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x21\x02\x22\x02\x3e\x00\x3e\x00\x92\x01\x91\x01\x40\x00\x40\x00\x30\x00\x31\x00\x30\x01\x31\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x6d\x02\x6e\x02\x3e\x00\x3e\x00\x90\x01\xeb\x01\x40\x00\x40\x00\xf6\x01\xf7\x01\x42\x00\x43\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x55\x00\x56\x00\x3e\x00\x3e\x00\xea\x01\xe9\x01\x40\x00\x40\x00\xd2\x01\xd3\x01\x42\x00\x43\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x64\x02\x65\x02\x3e\x00\x3e\x00\xe8\x01\xb5\x01\x40\x00\x40\x00\x42\x02\x43\x02\x42\x00\x43\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xdf\x01\x42\x00\x3e\x00\x3e\x00\xb0\x01\x53\x02\x40\x00\x40\x00\xcf\x01\xd0\x01\x22\x01\x4b\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x94\x02\x3e\x00\x3e\x00\x29\x02\x9d\x02\x40\x00\x40\x00\x1e\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xbb\x01\xbc\x01\x95\x02\x3e\x00\x1d\x01\xea\x02\x1b\x01\x40\x00\xbd\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x1c\x02\x1d\x02\x69\x02\x6a\x02\xcf\x01\xd0\x01\xf9\x02\xfa\x02\x1e\x02\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xbb\x01\xbc\x01\xfc\x02\xfd\x02\xf9\x02\xfa\x02\x42\x00\x43\x00\x1a\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x1c\x02\x1d\x02\xd2\x01\xd3\x01\xe4\x02\xe5\x02\xcf\x01\xd0\x01\x19\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x18\x01\x52\x02\xd2\x01\xd3\x01\xb6\x02\xb7\x02\x04\x03\x05\x03\xa9\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x4d\x02\xb6\x02\xb7\x02\x0a\x00\x0b\x00\x46\x00\x48\x00\x05\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x48\x02\x46\x00\x47\x00\x46\x00\x16\x01\x46\x00\xe1\x01\x04\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x9c\x02\x46\x00\xe0\x01\x46\x00\xda\x01\x46\x00\xd9\x01\x51\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x98\x02\x46\x00\xd5\x01\x46\x00\xd4\x01\x46\x00\xaf\x01\x97\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\xbc\x01\x46\x00\xae\x01\x46\x00\x5b\x02\x46\x00\x3c\x02\x77\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x1d\x02\x46\x00\x38\x02\x46\x00\x35\x02\x1b\x03\xb4\x02\x74\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x72\x01\x42\x00\x95\x02\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x47\x01\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x48\x01\x49\x01\x4a\x01\x7f\x01\x74\x01\x43\x01\x7d\x01\x04\x01\x43\x01\x43\x00\x51\x00\xf7\x01\x51\x00\x0c\x00\x51\x00\x51\x00\x43\x01\x51\x00\x43\x01\x43\x01\x43\x01\x43\x01\x07\x02\x43\x01\x05\x02\x67\x01\x43\x01\x61\x02\x66\x01\x61\x02\x51\x00\x52\x00\x6a\x02\x04\x01\xc2\x01\xc3\x01\x08\x02\x44\x01\xf0\x01\x04\x01\x9c\x01\x0b\x01\x4f\x02\x62\x01\x45\x02\xd7\x01\x61\x01\x22\x02\x17\x02\x0c\x00\x95\x02\x9c\x01\x9c\x01\x46\x02\x96\x02\x50\x02\x0d\x00\x0e\x00\x44\x01\xd8\x01\x04\x01\xfe\x02\x52\x01\x65\x02\x04\x01\x23\x02\xd4\x02\x62\x02\x0f\x00\xd6\x02\x6b\x02\x04\x01\x10\x00\xd2\x02\x0c\x00\xa1\x01\xd0\x02\xa2\x01\xa2\x01\x05\x01\x11\x00\x8b\x02\x4b\x01\x5d\x01\x12\x00\x13\x00\x42\x01\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\x0d\x00\x0e\x00\x75\x01\x75\x01\x7e\x01\x28\x00\x29\x00\x2a\x00\x2b\x00\x05\x00\x2c\x00\x45\x01\x0f\x00\x05\x01\x06\x01\x07\x01\x10\x00\x08\x01\x0c\x00\x05\x01\x06\x01\x07\x01\x42\x00\x81\x02\x11\x00\x0d\x00\x0e\x00\x0b\x02\x12\x00\x13\x00\xd6\x01\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\x0b\x01\x0f\x00\x43\x01\x0c\x01\x0d\x01\x10\x00\x37\x01\x38\x01\x05\x01\x39\x01\xbc\x02\x84\x02\x07\x02\x11\x00\x0c\x01\x0d\x01\x43\x01\x12\x00\x13\x00\x0c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\x0d\x00\x0e\x00\x05\x02\xd7\x01\x43\x01\x3e\x01\x3c\x01\x43\x01\x43\x01\x17\x02\x05\x00\x43\x01\x0f\x00\x06\x00\x03\x02\x02\x02\x10\x00\xd8\x01\x18\x02\x0c\x00\x19\x02\xda\x02\x1a\x02\xb9\x01\x11\x00\x4a\x02\x43\x01\x07\x00\x12\x00\x13\x00\xfc\x01\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\x4b\x02\x0d\x00\x0e\x00\x37\x02\x90\x02\x03\x02\x3b\x01\x17\x02\x0c\x00\x91\x02\x92\x02\x42\x00\xbf\x01\x0f\x00\x43\x01\x43\x01\xfb\x01\x10\x00\xff\x02\xf0\x01\x1a\x02\xfa\x01\x90\x02\x51\x00\xed\x01\x11\x00\x0d\x00\x0e\x00\xf0\x02\x12\x00\x13\x00\xf8\x01\x14\x00\x15\x00\x16\x00\x17\x00\x27\x00\xd4\x01\x0f\x00\xe0\x01\x1e\x02\x43\x01\x10\x00\x3a\x01\xab\x01\xf0\x01\x9c\x01\x90\x02\x05\x00\x05\x00\x11\x00\x0d\x00\x0e\x00\x16\x03\x12\x00\x13\x00\x1f\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x43\x01\x0f\x00\x9d\x01\x9e\x01\x9f\x01\x10\x00\xa0\x01\xdb\x02\xa1\x01\xb8\x01\xa2\x01\xb9\x01\x42\x00\x11\x00\x51\x00\xef\x01\x51\x00\x12\x00\x13\x00\x51\x00\x14\x00\x15\x00\x16\x00\x17\x00\x42\x01\xed\x01\xb6\x01\xb4\x01\xb7\x01\xf0\x01\xb8\x01\xc6\x01\xb9\x01\xca\x01\xc7\x01\xdb\x01\xdc\x01\x55\x02\xcb\x01\xee\x01\xcc\x01\x57\x01\x54\x02\x52\x02\x4d\x02\x48\x02\x3e\x02\x05\x00\x42\x00\xa0\x02\xdd\x01\xad\x01\x9f\x02\x9c\x02\x98\x02\x88\x02\xad\x01\x57\x01\x57\x01\x57\x01\xee\x01\x9e\x02\x7c\x02\xf0\x01\x7d\x02\x7b\x02\xad\x01\x57\x01\x57\x01\x57\x01\x78\x02\x75\x02\xd5\x02\xd1\x02\xab\x02\xad\x01\x57\x01\xaa\x02\xad\x01\x57\x01\xa7\x02\xe0\x02\xeb\x02\xde\x02\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\xdc\x02\x01\x03\x57\x01\x00\x03\x1a\x03\x57\x01\x57\x01\xad\x01\x57\x01\x5f\x02\x5d\x02\x05\x00\x5b\x02\x5a\x02\x57\x01\x57\x01\x58\x02\x57\x01\x57\x01\x57\x02\x42\x00\x3e\x02\x05\x00\x3c\x02\x3b\x02\x3a\x02\x05\x00\x37\x02\x05\x00\x35\x02\x34\x02\x42\x00\x2f\x02\x2e\x02\x2d\x02\x2c\x02\x2b\x02\x29\x02\xdf\x01\x27\x02\x05\x00\x17\x02\x16\x02\x15\x02\x14\x02\x13\x02\x12\x02\x11\x02\x10\x02\x0f\x02\x0e\x02\x0c\x02\x43\x00\x8b\x02\x42\x00\x88\x02\x86\x02\x84\x02\x83\x02\x81\x02\x73\x02\x72\x02\x71\x02\x6f\x02\x67\x02\x77\x02\x61\x02\x8b\x02\xcc\x02\x74\x02\xce\x02\xcc\x02\x43\x00\xc9\x02\xc8\x02\x42\x00\xc6\x02\xc4\x02\xc5\x02\xc1\x02\x42\x00\xc2\x02\xbf\x02\xbe\x02\xba\x02\xb9\x02\xb2\x02\xb1\x02\xb0\x02\xaf\x02\xae\x02\x11\x03\xa9\x02\xa6\x02\xa5\x02\xa4\x02\xa3\x02\xa2\x02\xf7\x02\xf6\x02\xf5\x02\xf4\x02\xf3\x02\xf2\x02\xef\x02\x42\x00\xea\x02\xe9\x02\xe8\x02\xe6\x02\xda\x02\xd9\x02\xd8\x02\x42\x00\x10\x03\x0c\x03\x43\x02\x0b\x03\x09\x03\x07\x03\x06\x03\x18\x03\x1a\x03\x19\x03\x16\x03\x15\x03\x42\x00\x1d\x03\xef\x02\x2b\x01\x1e\x03\x72\x01\xc1\x01\x24\x00\x5d\x01\x40\x01\x3f\x01\x95\x01\x02\x01\x70\x01\x6a\x01\x6d\x01\x33\x01\x32\x01\x08\x00\x52\x01\x00\x02\x62\x01\x58\x01\x4c\x01\xff\x01\xfe\x01\xfd\x01\xfc\x01\xd0\x01\x89\x02\x1b\x01\xe2\x01\x5f\x02\x5d\x02\x58\x02\x0c\x02\xf4\x01\x7a\x02\x00\x00\x77\x02\x74\x02\xbf\x02\xac\x02\xd3\x02\xe3\x01\x79\x02\xa9\x02\xa6\x02\xef\x02\x00\x00\x3d\x01\x00\x00\x36\x01\x00\x00\x27\x02\x09\x03\x00\x00\xc2\x02\xce\x02\xca\x02\x00\x00\x35\x01\x34\x01\xe6\x02\xe2\x02\x00\x00\x0c\x03\x0d\x03\x13\x03\x00\x00\x00\x00\x00\x00\xcc\x02\x00\x00\x07\x03\x00\x00\x00\x00\x6f\x02\x67\x02\x00\x00\x00\x00\x00\x00\xcf\x02\x0e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x02\x00\x00\xf7\x02\xfa\x02\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\x00\x00\x00\x00\x00\x00\xc0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x01\x00\x00\x00\x00\x00\x00\xbd\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#
+
+happyReduceArr = Happy_Data_Array.array (3, 425) [
+	(3 , happyReduce_3),
+	(4 , happyReduce_4),
+	(5 , happyReduce_5),
+	(6 , happyReduce_6),
+	(7 , happyReduce_7),
+	(8 , happyReduce_8),
+	(9 , happyReduce_9),
+	(10 , happyReduce_10),
+	(11 , happyReduce_11),
+	(12 , happyReduce_12),
+	(13 , happyReduce_13),
+	(14 , happyReduce_14),
+	(15 , happyReduce_15),
+	(16 , happyReduce_16),
+	(17 , happyReduce_17),
+	(18 , happyReduce_18),
+	(19 , happyReduce_19),
+	(20 , happyReduce_20),
+	(21 , happyReduce_21),
+	(22 , happyReduce_22),
+	(23 , happyReduce_23),
+	(24 , happyReduce_24),
+	(25 , happyReduce_25),
+	(26 , happyReduce_26),
+	(27 , happyReduce_27),
+	(28 , happyReduce_28),
+	(29 , happyReduce_29),
+	(30 , happyReduce_30),
+	(31 , happyReduce_31),
+	(32 , happyReduce_32),
+	(33 , happyReduce_33),
+	(34 , happyReduce_34),
+	(35 , happyReduce_35),
+	(36 , happyReduce_36),
+	(37 , happyReduce_37),
+	(38 , happyReduce_38),
+	(39 , happyReduce_39),
+	(40 , happyReduce_40),
+	(41 , happyReduce_41),
+	(42 , happyReduce_42),
+	(43 , happyReduce_43),
+	(44 , happyReduce_44),
+	(45 , happyReduce_45),
+	(46 , happyReduce_46),
+	(47 , happyReduce_47),
+	(48 , happyReduce_48),
+	(49 , happyReduce_49),
+	(50 , happyReduce_50),
+	(51 , happyReduce_51),
+	(52 , happyReduce_52),
+	(53 , happyReduce_53),
+	(54 , happyReduce_54),
+	(55 , happyReduce_55),
+	(56 , happyReduce_56),
+	(57 , happyReduce_57),
+	(58 , happyReduce_58),
+	(59 , happyReduce_59),
+	(60 , happyReduce_60),
+	(61 , happyReduce_61),
+	(62 , happyReduce_62),
+	(63 , happyReduce_63),
+	(64 , happyReduce_64),
+	(65 , happyReduce_65),
+	(66 , happyReduce_66),
+	(67 , happyReduce_67),
+	(68 , happyReduce_68),
+	(69 , happyReduce_69),
+	(70 , happyReduce_70),
+	(71 , happyReduce_71),
+	(72 , happyReduce_72),
+	(73 , happyReduce_73),
+	(74 , happyReduce_74),
+	(75 , happyReduce_75),
+	(76 , happyReduce_76),
+	(77 , happyReduce_77),
+	(78 , happyReduce_78),
+	(79 , happyReduce_79),
+	(80 , happyReduce_80),
+	(81 , happyReduce_81),
+	(82 , happyReduce_82),
+	(83 , happyReduce_83),
+	(84 , happyReduce_84),
+	(85 , happyReduce_85),
+	(86 , happyReduce_86),
+	(87 , happyReduce_87),
+	(88 , happyReduce_88),
+	(89 , happyReduce_89),
+	(90 , happyReduce_90),
+	(91 , happyReduce_91),
+	(92 , happyReduce_92),
+	(93 , happyReduce_93),
+	(94 , happyReduce_94),
+	(95 , happyReduce_95),
+	(96 , happyReduce_96),
+	(97 , happyReduce_97),
+	(98 , happyReduce_98),
+	(99 , happyReduce_99),
+	(100 , happyReduce_100),
+	(101 , happyReduce_101),
+	(102 , happyReduce_102),
+	(103 , happyReduce_103),
+	(104 , happyReduce_104),
+	(105 , happyReduce_105),
+	(106 , happyReduce_106),
+	(107 , happyReduce_107),
+	(108 , happyReduce_108),
+	(109 , happyReduce_109),
+	(110 , happyReduce_110),
+	(111 , happyReduce_111),
+	(112 , happyReduce_112),
+	(113 , happyReduce_113),
+	(114 , happyReduce_114),
+	(115 , happyReduce_115),
+	(116 , happyReduce_116),
+	(117 , happyReduce_117),
+	(118 , happyReduce_118),
+	(119 , happyReduce_119),
+	(120 , happyReduce_120),
+	(121 , happyReduce_121),
+	(122 , happyReduce_122),
+	(123 , happyReduce_123),
+	(124 , happyReduce_124),
+	(125 , happyReduce_125),
+	(126 , happyReduce_126),
+	(127 , happyReduce_127),
+	(128 , happyReduce_128),
+	(129 , happyReduce_129),
+	(130 , happyReduce_130),
+	(131 , happyReduce_131),
+	(132 , happyReduce_132),
+	(133 , happyReduce_133),
+	(134 , happyReduce_134),
+	(135 , happyReduce_135),
+	(136 , happyReduce_136),
+	(137 , happyReduce_137),
+	(138 , happyReduce_138),
+	(139 , happyReduce_139),
+	(140 , happyReduce_140),
+	(141 , happyReduce_141),
+	(142 , happyReduce_142),
+	(143 , happyReduce_143),
+	(144 , happyReduce_144),
+	(145 , happyReduce_145),
+	(146 , happyReduce_146),
+	(147 , happyReduce_147),
+	(148 , happyReduce_148),
+	(149 , happyReduce_149),
+	(150 , happyReduce_150),
+	(151 , happyReduce_151),
+	(152 , happyReduce_152),
+	(153 , happyReduce_153),
+	(154 , happyReduce_154),
+	(155 , happyReduce_155),
+	(156 , happyReduce_156),
+	(157 , happyReduce_157),
+	(158 , happyReduce_158),
+	(159 , happyReduce_159),
+	(160 , happyReduce_160),
+	(161 , happyReduce_161),
+	(162 , happyReduce_162),
+	(163 , happyReduce_163),
+	(164 , happyReduce_164),
+	(165 , happyReduce_165),
+	(166 , happyReduce_166),
+	(167 , happyReduce_167),
+	(168 , happyReduce_168),
+	(169 , happyReduce_169),
+	(170 , happyReduce_170),
+	(171 , happyReduce_171),
+	(172 , happyReduce_172),
+	(173 , happyReduce_173),
+	(174 , happyReduce_174),
+	(175 , happyReduce_175),
+	(176 , happyReduce_176),
+	(177 , happyReduce_177),
+	(178 , happyReduce_178),
+	(179 , happyReduce_179),
+	(180 , happyReduce_180),
+	(181 , happyReduce_181),
+	(182 , happyReduce_182),
+	(183 , happyReduce_183),
+	(184 , happyReduce_184),
+	(185 , happyReduce_185),
+	(186 , happyReduce_186),
+	(187 , happyReduce_187),
+	(188 , happyReduce_188),
+	(189 , happyReduce_189),
+	(190 , happyReduce_190),
+	(191 , happyReduce_191),
+	(192 , happyReduce_192),
+	(193 , happyReduce_193),
+	(194 , happyReduce_194),
+	(195 , happyReduce_195),
+	(196 , happyReduce_196),
+	(197 , happyReduce_197),
+	(198 , happyReduce_198),
+	(199 , happyReduce_199),
+	(200 , happyReduce_200),
+	(201 , happyReduce_201),
+	(202 , happyReduce_202),
+	(203 , happyReduce_203),
+	(204 , happyReduce_204),
+	(205 , happyReduce_205),
+	(206 , happyReduce_206),
+	(207 , happyReduce_207),
+	(208 , happyReduce_208),
+	(209 , happyReduce_209),
+	(210 , happyReduce_210),
+	(211 , happyReduce_211),
+	(212 , happyReduce_212),
+	(213 , happyReduce_213),
+	(214 , happyReduce_214),
+	(215 , happyReduce_215),
+	(216 , happyReduce_216),
+	(217 , happyReduce_217),
+	(218 , happyReduce_218),
+	(219 , happyReduce_219),
+	(220 , happyReduce_220),
+	(221 , happyReduce_221),
+	(222 , happyReduce_222),
+	(223 , happyReduce_223),
+	(224 , happyReduce_224),
+	(225 , happyReduce_225),
+	(226 , happyReduce_226),
+	(227 , happyReduce_227),
+	(228 , happyReduce_228),
+	(229 , happyReduce_229),
+	(230 , happyReduce_230),
+	(231 , happyReduce_231),
+	(232 , happyReduce_232),
+	(233 , happyReduce_233),
+	(234 , happyReduce_234),
+	(235 , happyReduce_235),
+	(236 , happyReduce_236),
+	(237 , happyReduce_237),
+	(238 , happyReduce_238),
+	(239 , happyReduce_239),
+	(240 , happyReduce_240),
+	(241 , happyReduce_241),
+	(242 , happyReduce_242),
+	(243 , happyReduce_243),
+	(244 , happyReduce_244),
+	(245 , happyReduce_245),
+	(246 , happyReduce_246),
+	(247 , happyReduce_247),
+	(248 , happyReduce_248),
+	(249 , happyReduce_249),
+	(250 , happyReduce_250),
+	(251 , happyReduce_251),
+	(252 , happyReduce_252),
+	(253 , happyReduce_253),
+	(254 , happyReduce_254),
+	(255 , happyReduce_255),
+	(256 , happyReduce_256),
+	(257 , happyReduce_257),
+	(258 , happyReduce_258),
+	(259 , happyReduce_259),
+	(260 , happyReduce_260),
+	(261 , happyReduce_261),
+	(262 , happyReduce_262),
+	(263 , happyReduce_263),
+	(264 , happyReduce_264),
+	(265 , happyReduce_265),
+	(266 , happyReduce_266),
+	(267 , happyReduce_267),
+	(268 , happyReduce_268),
+	(269 , happyReduce_269),
+	(270 , happyReduce_270),
+	(271 , happyReduce_271),
+	(272 , happyReduce_272),
+	(273 , happyReduce_273),
+	(274 , happyReduce_274),
+	(275 , happyReduce_275),
+	(276 , happyReduce_276),
+	(277 , happyReduce_277),
+	(278 , happyReduce_278),
+	(279 , happyReduce_279),
+	(280 , happyReduce_280),
+	(281 , happyReduce_281),
+	(282 , happyReduce_282),
+	(283 , happyReduce_283),
+	(284 , happyReduce_284),
+	(285 , happyReduce_285),
+	(286 , happyReduce_286),
+	(287 , happyReduce_287),
+	(288 , happyReduce_288),
+	(289 , happyReduce_289),
+	(290 , happyReduce_290),
+	(291 , happyReduce_291),
+	(292 , happyReduce_292),
+	(293 , happyReduce_293),
+	(294 , happyReduce_294),
+	(295 , happyReduce_295),
+	(296 , happyReduce_296),
+	(297 , happyReduce_297),
+	(298 , happyReduce_298),
+	(299 , happyReduce_299),
+	(300 , happyReduce_300),
+	(301 , happyReduce_301),
+	(302 , happyReduce_302),
+	(303 , happyReduce_303),
+	(304 , happyReduce_304),
+	(305 , happyReduce_305),
+	(306 , happyReduce_306),
+	(307 , happyReduce_307),
+	(308 , happyReduce_308),
+	(309 , happyReduce_309),
+	(310 , happyReduce_310),
+	(311 , happyReduce_311),
+	(312 , happyReduce_312),
+	(313 , happyReduce_313),
+	(314 , happyReduce_314),
+	(315 , happyReduce_315),
+	(316 , happyReduce_316),
+	(317 , happyReduce_317),
+	(318 , happyReduce_318),
+	(319 , happyReduce_319),
+	(320 , happyReduce_320),
+	(321 , happyReduce_321),
+	(322 , happyReduce_322),
+	(323 , happyReduce_323),
+	(324 , happyReduce_324),
+	(325 , happyReduce_325),
+	(326 , happyReduce_326),
+	(327 , happyReduce_327),
+	(328 , happyReduce_328),
+	(329 , happyReduce_329),
+	(330 , happyReduce_330),
+	(331 , happyReduce_331),
+	(332 , happyReduce_332),
+	(333 , happyReduce_333),
+	(334 , happyReduce_334),
+	(335 , happyReduce_335),
+	(336 , happyReduce_336),
+	(337 , happyReduce_337),
+	(338 , happyReduce_338),
+	(339 , happyReduce_339),
+	(340 , happyReduce_340),
+	(341 , happyReduce_341),
+	(342 , happyReduce_342),
+	(343 , happyReduce_343),
+	(344 , happyReduce_344),
+	(345 , happyReduce_345),
+	(346 , happyReduce_346),
+	(347 , happyReduce_347),
+	(348 , happyReduce_348),
+	(349 , happyReduce_349),
+	(350 , happyReduce_350),
+	(351 , happyReduce_351),
+	(352 , happyReduce_352),
+	(353 , happyReduce_353),
+	(354 , happyReduce_354),
+	(355 , happyReduce_355),
+	(356 , happyReduce_356),
+	(357 , happyReduce_357),
+	(358 , happyReduce_358),
+	(359 , happyReduce_359),
+	(360 , happyReduce_360),
+	(361 , happyReduce_361),
+	(362 , happyReduce_362),
+	(363 , happyReduce_363),
+	(364 , happyReduce_364),
+	(365 , happyReduce_365),
+	(366 , happyReduce_366),
+	(367 , happyReduce_367),
+	(368 , happyReduce_368),
+	(369 , happyReduce_369),
+	(370 , happyReduce_370),
+	(371 , happyReduce_371),
+	(372 , happyReduce_372),
+	(373 , happyReduce_373),
+	(374 , happyReduce_374),
+	(375 , happyReduce_375),
+	(376 , happyReduce_376),
+	(377 , happyReduce_377),
+	(378 , happyReduce_378),
+	(379 , happyReduce_379),
+	(380 , happyReduce_380),
+	(381 , happyReduce_381),
+	(382 , happyReduce_382),
+	(383 , happyReduce_383),
+	(384 , happyReduce_384),
+	(385 , happyReduce_385),
+	(386 , happyReduce_386),
+	(387 , happyReduce_387),
+	(388 , happyReduce_388),
+	(389 , happyReduce_389),
+	(390 , happyReduce_390),
+	(391 , happyReduce_391),
+	(392 , happyReduce_392),
+	(393 , happyReduce_393),
+	(394 , happyReduce_394),
+	(395 , happyReduce_395),
+	(396 , happyReduce_396),
+	(397 , happyReduce_397),
+	(398 , happyReduce_398),
+	(399 , happyReduce_399),
+	(400 , happyReduce_400),
+	(401 , happyReduce_401),
+	(402 , happyReduce_402),
+	(403 , happyReduce_403),
+	(404 , happyReduce_404),
+	(405 , happyReduce_405),
+	(406 , happyReduce_406),
+	(407 , happyReduce_407),
+	(408 , happyReduce_408),
+	(409 , happyReduce_409),
+	(410 , happyReduce_410),
+	(411 , happyReduce_411),
+	(412 , happyReduce_412),
+	(413 , happyReduce_413),
+	(414 , happyReduce_414),
+	(415 , happyReduce_415),
+	(416 , happyReduce_416),
+	(417 , happyReduce_417),
+	(418 , happyReduce_418),
+	(419 , happyReduce_419),
+	(420 , happyReduce_420),
+	(421 , happyReduce_421),
+	(422 , happyReduce_422),
+	(423 , happyReduce_423),
+	(424 , happyReduce_424),
+	(425 , happyReduce_425)
+	]
+
+happy_n_terms = 223 :: Int
+happy_n_nonterms = 126 :: Int
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_3 = happyMonadReduce 1# 0# happyReduction_3
+happyReduction_3 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TStringLit happy_var_1)) -> 
+	(
+        case TLEncoding.decodeUtf8' happy_var_1 of
+            Right t -> Right t
+            Left err -> Left "invalid utf8 string")})
+	) (\r -> happyReturn (happyIn6 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_4 = happySpecReduce_1  1# happyReduction_4
+happyReduction_4 happy_x_1
+	 =  case happyOut6 happy_x_1 of { happy_var_1 -> 
+	happyIn7
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_5 = happySpecReduce_1  2# happyReduction_5
+happyReduction_5 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Lexeme _ (TId happy_var_1)) -> 
+	happyIn8
+		 (Ident (TLEncoding.decodeUtf8 happy_var_1)
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_6 = happySpecReduce_1  3# happyReduction_6
+happyReduction_6 happy_x_1
+	 =  happyIn9
+		 (I32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_7 = happySpecReduce_1  3# happyReduction_7
+happyReduction_7 happy_x_1
+	 =  happyIn9
+		 (I64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_8 = happySpecReduce_1  3# happyReduction_8
+happyReduction_8 happy_x_1
+	 =  happyIn9
+		 (F32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_9 = happySpecReduce_1  3# happyReduction_9
+happyReduction_9 happy_x_1
+	 =  happyIn9
+		 (F64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_10 = happySpecReduce_1  4# happyReduction_10
+happyReduction_10 happy_x_1
+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
+	happyIn10
+		 (Index happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_11 = happySpecReduce_1  4# happyReduction_11
+happyReduction_11 happy_x_1
+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
+	happyIn10
+		 (Named happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_12 = happyMonadReduce 1# 5# happyReduction_12
+happyReduction_12 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> 
+	(
+        if happy_var_1 >= -(2^31) && happy_var_1 < 2^32
+        then Right happy_var_1
+        else Left ("Int literal value is out of signed int32 boundaries: " ++ show happy_var_1))})
+	) (\r -> happyReturn (happyIn11 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_13 = happyMonadReduce 1# 6# happyReduction_13
+happyReduction_13 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> 
+	(
+        if happy_var_1 >= 0 && happy_var_1 < 2^32
+        then Right (fromIntegral happy_var_1)
+        else Left ("Int literal value is out of unsigned int32 boundaries: " ++ show happy_var_1))})
+	) (\r -> happyReturn (happyIn12 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_14 = happyMonadReduce 1# 7# happyReduction_14
+happyReduction_14 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> 
+	(
+        if happy_var_1 >= -(2^63) && happy_var_1 < 2^64
+        then Right happy_var_1
+        else Left ("Int literal value is out of signed int64 boundaries: " ++ show happy_var_1))})
+	) (\r -> happyReturn (happyIn13 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_15 = happyMonadReduce 1# 8# happyReduction_15
+happyReduction_15 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> 
+	(
+        let maxInt = 340282356779733623858607532500980858880 in
+        if happy_var_1 <= maxInt && happy_var_1 >= -maxInt
+        then return $ fromIntegral happy_var_1
+        else Left "constant out of range")})
+	) (\r -> happyReturn (happyIn14 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_16 = happyMonadReduce 1# 8# happyReduction_16
+happyReduction_16 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TFloatLit happy_var_1)) -> 
+	( asFloat happy_var_1)})
+	) (\r -> happyReturn (happyIn14 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_17 = happyMonadReduce 1# 9# happyReduction_17
+happyReduction_17 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TIntLit happy_var_1)) -> 
+	(
+        let maxInt = round (maxFinite :: Double) in
+        if happy_var_1 <= maxInt && happy_var_1 >= -maxInt
+        then return $ fromIntegral happy_var_1
+        else Left "constant out of range")})
+	) (\r -> happyReturn (happyIn15 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_18 = happyMonadReduce 1# 9# happyReduction_18
+happyReduction_18 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOutTok happy_x_1 of { (Lexeme _ (TFloatLit happy_var_1)) -> 
+	( asDouble happy_var_1)})
+	) (\r -> happyReturn (happyIn15 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_19 = happySpecReduce_1  10# happyReduction_19
+happyReduction_19 happy_x_1
+	 =  happyIn16
+		 (Unreachable
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_20 = happySpecReduce_1  10# happyReduction_20
+happyReduction_20 happy_x_1
+	 =  happyIn16
+		 (Nop
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_21 = happySpecReduce_2  10# happyReduction_21
+happyReduction_21 happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (Br happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_22 = happySpecReduce_2  10# happyReduction_22
+happyReduction_22 happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (BrIf happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_23 = happySpecReduce_2  10# happyReduction_23
+happyReduction_23 happy_x_2
+	happy_x_1
+	 =  case happyOut123 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (BrTable (reverse $ tail happy_var_2) (head happy_var_2)
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_24 = happySpecReduce_1  10# happyReduction_24
+happyReduction_24 happy_x_1
+	 =  happyIn16
+		 (Return
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_25 = happySpecReduce_2  10# happyReduction_25
+happyReduction_25 happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (Call happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_26 = happySpecReduce_1  10# happyReduction_26
+happyReduction_26 happy_x_1
+	 =  happyIn16
+		 (Drop
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_27 = happySpecReduce_1  10# happyReduction_27
+happyReduction_27 happy_x_1
+	 =  happyIn16
+		 (Select
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_28 = happySpecReduce_2  10# happyReduction_28
+happyReduction_28 happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (GetLocal happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_29 = happySpecReduce_2  10# happyReduction_29
+happyReduction_29 happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (SetLocal happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_30 = happySpecReduce_2  10# happyReduction_30
+happyReduction_30 happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (TeeLocal happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_31 = happySpecReduce_2  10# happyReduction_31
+happyReduction_31 happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (GetGlobal happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_32 = happySpecReduce_2  10# happyReduction_32
+happyReduction_32 happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (SetGlobal happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_33 = happySpecReduce_2  10# happyReduction_33
+happyReduction_33 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Load happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_34 = happySpecReduce_2  10# happyReduction_34
+happyReduction_34 happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Load happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_35 = happySpecReduce_2  10# happyReduction_35
+happyReduction_35 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (F32Load happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_36 = happySpecReduce_2  10# happyReduction_36
+happyReduction_36 happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (F64Load happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_37 = happySpecReduce_2  10# happyReduction_37
+happyReduction_37 happy_x_2
+	happy_x_1
+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Load8S happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_38 = happySpecReduce_2  10# happyReduction_38
+happyReduction_38 happy_x_2
+	happy_x_1
+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Load8U happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_39 = happySpecReduce_2  10# happyReduction_39
+happyReduction_39 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Load16S happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_40 = happySpecReduce_2  10# happyReduction_40
+happyReduction_40 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Load16U happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_41 = happySpecReduce_2  10# happyReduction_41
+happyReduction_41 happy_x_2
+	happy_x_1
+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Load8S happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_42 = happySpecReduce_2  10# happyReduction_42
+happyReduction_42 happy_x_2
+	happy_x_1
+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Load8U happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_43 = happySpecReduce_2  10# happyReduction_43
+happyReduction_43 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Load16S happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_44 = happySpecReduce_2  10# happyReduction_44
+happyReduction_44 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Load16U happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_45 = happySpecReduce_2  10# happyReduction_45
+happyReduction_45 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Load32S happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_46 = happySpecReduce_2  10# happyReduction_46
+happyReduction_46 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Load32U happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_47 = happySpecReduce_2  10# happyReduction_47
+happyReduction_47 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Store happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_48 = happySpecReduce_2  10# happyReduction_48
+happyReduction_48 happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Store happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_49 = happySpecReduce_2  10# happyReduction_49
+happyReduction_49 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (F32Store happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_50 = happySpecReduce_2  10# happyReduction_50
+happyReduction_50 happy_x_2
+	happy_x_1
+	 =  case happyOut31 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (F64Store happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_51 = happySpecReduce_2  10# happyReduction_51
+happyReduction_51 happy_x_2
+	happy_x_1
+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Store8 happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_52 = happySpecReduce_2  10# happyReduction_52
+happyReduction_52 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Store16 happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_53 = happySpecReduce_2  10# happyReduction_53
+happyReduction_53 happy_x_2
+	happy_x_1
+	 =  case happyOut28 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Store8 happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_54 = happySpecReduce_2  10# happyReduction_54
+happyReduction_54 happy_x_2
+	happy_x_1
+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Store16 happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_55 = happySpecReduce_2  10# happyReduction_55
+happyReduction_55 happy_x_2
+	happy_x_1
+	 =  case happyOut30 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Store32 happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_56 = happySpecReduce_1  10# happyReduction_56
+happyReduction_56 happy_x_1
+	 =  happyIn16
+		 (CurrentMemory
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_57 = happySpecReduce_1  10# happyReduction_57
+happyReduction_57 happy_x_1
+	 =  happyIn16
+		 (GrowMemory
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_58 = happySpecReduce_1  10# happyReduction_58
+happyReduction_58 happy_x_1
+	 =  happyIn16
+		 (CurrentMemory
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_59 = happySpecReduce_1  10# happyReduction_59
+happyReduction_59 happy_x_1
+	 =  happyIn16
+		 (GrowMemory
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_60 = happySpecReduce_2  10# happyReduction_60
+happyReduction_60 happy_x_2
+	happy_x_1
+	 =  case happyOut11 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I32Const happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_61 = happySpecReduce_2  10# happyReduction_61
+happyReduction_61 happy_x_2
+	happy_x_1
+	 =  case happyOut13 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (I64Const happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_62 = happySpecReduce_2  10# happyReduction_62
+happyReduction_62 happy_x_2
+	happy_x_1
+	 =  case happyOut14 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (F32Const happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_63 = happySpecReduce_2  10# happyReduction_63
+happyReduction_63 happy_x_2
+	happy_x_1
+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> 
+	happyIn16
+		 (F64Const happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_64 = happySpecReduce_1  10# happyReduction_64
+happyReduction_64 happy_x_1
+	 =  happyIn16
+		 (IUnOp BS32 IClz
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_65 = happySpecReduce_1  10# happyReduction_65
+happyReduction_65 happy_x_1
+	 =  happyIn16
+		 (IUnOp BS32 ICtz
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_66 = happySpecReduce_1  10# happyReduction_66
+happyReduction_66 happy_x_1
+	 =  happyIn16
+		 (IUnOp BS32 IPopcnt
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_67 = happySpecReduce_1  10# happyReduction_67
+happyReduction_67 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IAdd
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_68 = happySpecReduce_1  10# happyReduction_68
+happyReduction_68 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 ISub
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_69 = happySpecReduce_1  10# happyReduction_69
+happyReduction_69 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IMul
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_70 = happySpecReduce_1  10# happyReduction_70
+happyReduction_70 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IDivS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_71 = happySpecReduce_1  10# happyReduction_71
+happyReduction_71 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IDivU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_72 = happySpecReduce_1  10# happyReduction_72
+happyReduction_72 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IRemS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_73 = happySpecReduce_1  10# happyReduction_73
+happyReduction_73 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IRemU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_74 = happySpecReduce_1  10# happyReduction_74
+happyReduction_74 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IAnd
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_75 = happySpecReduce_1  10# happyReduction_75
+happyReduction_75 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IOr
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_76 = happySpecReduce_1  10# happyReduction_76
+happyReduction_76 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IXor
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_77 = happySpecReduce_1  10# happyReduction_77
+happyReduction_77 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IShl
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_78 = happySpecReduce_1  10# happyReduction_78
+happyReduction_78 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IShrS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_79 = happySpecReduce_1  10# happyReduction_79
+happyReduction_79 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IShrU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_80 = happySpecReduce_1  10# happyReduction_80
+happyReduction_80 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IRotl
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_81 = happySpecReduce_1  10# happyReduction_81
+happyReduction_81 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS32 IRotr
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_82 = happySpecReduce_1  10# happyReduction_82
+happyReduction_82 happy_x_1
+	 =  happyIn16
+		 (IUnOp BS64 IClz
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_83 = happySpecReduce_1  10# happyReduction_83
+happyReduction_83 happy_x_1
+	 =  happyIn16
+		 (IUnOp BS64 ICtz
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_84 = happySpecReduce_1  10# happyReduction_84
+happyReduction_84 happy_x_1
+	 =  happyIn16
+		 (IUnOp BS64 IPopcnt
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_85 = happySpecReduce_1  10# happyReduction_85
+happyReduction_85 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IAdd
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_86 = happySpecReduce_1  10# happyReduction_86
+happyReduction_86 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 ISub
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_87 = happySpecReduce_1  10# happyReduction_87
+happyReduction_87 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IMul
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_88 = happySpecReduce_1  10# happyReduction_88
+happyReduction_88 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IDivS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_89 = happySpecReduce_1  10# happyReduction_89
+happyReduction_89 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IDivU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_90 = happySpecReduce_1  10# happyReduction_90
+happyReduction_90 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IRemS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_91 = happySpecReduce_1  10# happyReduction_91
+happyReduction_91 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IRemU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_92 = happySpecReduce_1  10# happyReduction_92
+happyReduction_92 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IAnd
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_93 = happySpecReduce_1  10# happyReduction_93
+happyReduction_93 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IOr
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_94 = happySpecReduce_1  10# happyReduction_94
+happyReduction_94 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IXor
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_95 = happySpecReduce_1  10# happyReduction_95
+happyReduction_95 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IShl
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_96 = happySpecReduce_1  10# happyReduction_96
+happyReduction_96 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IShrS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_97 = happySpecReduce_1  10# happyReduction_97
+happyReduction_97 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IShrU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_98 = happySpecReduce_1  10# happyReduction_98
+happyReduction_98 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IRotl
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_99 = happySpecReduce_1  10# happyReduction_99
+happyReduction_99 happy_x_1
+	 =  happyIn16
+		 (IBinOp BS64 IRotr
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_100 = happySpecReduce_1  10# happyReduction_100
+happyReduction_100 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS32 FAbs
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_101 = happySpecReduce_1  10# happyReduction_101
+happyReduction_101 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS32 FNeg
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_102 = happySpecReduce_1  10# happyReduction_102
+happyReduction_102 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS32 FCeil
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_103 = happySpecReduce_1  10# happyReduction_103
+happyReduction_103 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS32 FFloor
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_104 = happySpecReduce_1  10# happyReduction_104
+happyReduction_104 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS32 FTrunc
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_105 = happySpecReduce_1  10# happyReduction_105
+happyReduction_105 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS32 FNearest
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_106 = happySpecReduce_1  10# happyReduction_106
+happyReduction_106 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS32 FSqrt
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_107 = happySpecReduce_1  10# happyReduction_107
+happyReduction_107 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS32 FAdd
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_108 = happySpecReduce_1  10# happyReduction_108
+happyReduction_108 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS32 FSub
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_109 = happySpecReduce_1  10# happyReduction_109
+happyReduction_109 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS32 FMul
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_110 = happySpecReduce_1  10# happyReduction_110
+happyReduction_110 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS32 FDiv
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_111 = happySpecReduce_1  10# happyReduction_111
+happyReduction_111 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS32 FMin
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_112 = happySpecReduce_1  10# happyReduction_112
+happyReduction_112 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS32 FMax
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_113 = happySpecReduce_1  10# happyReduction_113
+happyReduction_113 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS32 FCopySign
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_114 = happySpecReduce_1  10# happyReduction_114
+happyReduction_114 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS64 FAbs
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_115 = happySpecReduce_1  10# happyReduction_115
+happyReduction_115 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS64 FNeg
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_116 = happySpecReduce_1  10# happyReduction_116
+happyReduction_116 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS64 FCeil
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_117 = happySpecReduce_1  10# happyReduction_117
+happyReduction_117 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS64 FFloor
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_118 = happySpecReduce_1  10# happyReduction_118
+happyReduction_118 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS64 FTrunc
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_119 = happySpecReduce_1  10# happyReduction_119
+happyReduction_119 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS64 FNearest
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_120 = happySpecReduce_1  10# happyReduction_120
+happyReduction_120 happy_x_1
+	 =  happyIn16
+		 (FUnOp BS64 FSqrt
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_121 = happySpecReduce_1  10# happyReduction_121
+happyReduction_121 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS64 FAdd
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_122 = happySpecReduce_1  10# happyReduction_122
+happyReduction_122 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS64 FSub
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_123 = happySpecReduce_1  10# happyReduction_123
+happyReduction_123 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS64 FMul
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_124 = happySpecReduce_1  10# happyReduction_124
+happyReduction_124 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS64 FDiv
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_125 = happySpecReduce_1  10# happyReduction_125
+happyReduction_125 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS64 FMin
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_126 = happySpecReduce_1  10# happyReduction_126
+happyReduction_126 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS64 FMax
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_127 = happySpecReduce_1  10# happyReduction_127
+happyReduction_127 happy_x_1
+	 =  happyIn16
+		 (FBinOp BS64 FCopySign
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_128 = happySpecReduce_1  10# happyReduction_128
+happyReduction_128 happy_x_1
+	 =  happyIn16
+		 (I32Eqz
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_129 = happySpecReduce_1  10# happyReduction_129
+happyReduction_129 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 IEq
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_130 = happySpecReduce_1  10# happyReduction_130
+happyReduction_130 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 INe
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_131 = happySpecReduce_1  10# happyReduction_131
+happyReduction_131 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 ILtS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_132 = happySpecReduce_1  10# happyReduction_132
+happyReduction_132 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 ILtU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_133 = happySpecReduce_1  10# happyReduction_133
+happyReduction_133 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 IGtS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_134 = happySpecReduce_1  10# happyReduction_134
+happyReduction_134 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 IGtU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_135 = happySpecReduce_1  10# happyReduction_135
+happyReduction_135 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 ILeS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_136 = happySpecReduce_1  10# happyReduction_136
+happyReduction_136 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 ILeU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_137 = happySpecReduce_1  10# happyReduction_137
+happyReduction_137 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 IGeS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_138 = happySpecReduce_1  10# happyReduction_138
+happyReduction_138 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS32 IGeU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_139 = happySpecReduce_1  10# happyReduction_139
+happyReduction_139 happy_x_1
+	 =  happyIn16
+		 (I64Eqz
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_140 = happySpecReduce_1  10# happyReduction_140
+happyReduction_140 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 IEq
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_141 = happySpecReduce_1  10# happyReduction_141
+happyReduction_141 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 INe
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_142 = happySpecReduce_1  10# happyReduction_142
+happyReduction_142 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 ILtS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_143 = happySpecReduce_1  10# happyReduction_143
+happyReduction_143 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 ILtU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_144 = happySpecReduce_1  10# happyReduction_144
+happyReduction_144 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 IGtS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_145 = happySpecReduce_1  10# happyReduction_145
+happyReduction_145 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 IGtU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_146 = happySpecReduce_1  10# happyReduction_146
+happyReduction_146 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 ILeS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_147 = happySpecReduce_1  10# happyReduction_147
+happyReduction_147 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 ILeU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_148 = happySpecReduce_1  10# happyReduction_148
+happyReduction_148 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 IGeS
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_149 = happySpecReduce_1  10# happyReduction_149
+happyReduction_149 happy_x_1
+	 =  happyIn16
+		 (IRelOp BS64 IGeU
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_150 = happySpecReduce_1  10# happyReduction_150
+happyReduction_150 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS32 FEq
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_151 = happySpecReduce_1  10# happyReduction_151
+happyReduction_151 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS32 FNe
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_152 = happySpecReduce_1  10# happyReduction_152
+happyReduction_152 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS32 FLt
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_153 = happySpecReduce_1  10# happyReduction_153
+happyReduction_153 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS32 FGt
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_154 = happySpecReduce_1  10# happyReduction_154
+happyReduction_154 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS32 FLe
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_155 = happySpecReduce_1  10# happyReduction_155
+happyReduction_155 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS32 FGe
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_156 = happySpecReduce_1  10# happyReduction_156
+happyReduction_156 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS64 FEq
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_157 = happySpecReduce_1  10# happyReduction_157
+happyReduction_157 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS64 FNe
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_158 = happySpecReduce_1  10# happyReduction_158
+happyReduction_158 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS64 FLt
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_159 = happySpecReduce_1  10# happyReduction_159
+happyReduction_159 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS64 FGt
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_160 = happySpecReduce_1  10# happyReduction_160
+happyReduction_160 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS64 FLe
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_161 = happySpecReduce_1  10# happyReduction_161
+happyReduction_161 happy_x_1
+	 =  happyIn16
+		 (FRelOp BS64 FGe
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_162 = happySpecReduce_1  10# happyReduction_162
+happyReduction_162 happy_x_1
+	 =  happyIn16
+		 (I32WrapI64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_163 = happySpecReduce_1  10# happyReduction_163
+happyReduction_163 happy_x_1
+	 =  happyIn16
+		 (ITruncFS BS32 BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_164 = happySpecReduce_1  10# happyReduction_164
+happyReduction_164 happy_x_1
+	 =  happyIn16
+		 (ITruncFU BS32 BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_165 = happySpecReduce_1  10# happyReduction_165
+happyReduction_165 happy_x_1
+	 =  happyIn16
+		 (ITruncFS BS32 BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_166 = happySpecReduce_1  10# happyReduction_166
+happyReduction_166 happy_x_1
+	 =  happyIn16
+		 (ITruncFU BS32 BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_167 = happySpecReduce_1  10# happyReduction_167
+happyReduction_167 happy_x_1
+	 =  happyIn16
+		 (I64ExtendSI32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_168 = happySpecReduce_1  10# happyReduction_168
+happyReduction_168 happy_x_1
+	 =  happyIn16
+		 (I64ExtendUI32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_169 = happySpecReduce_1  10# happyReduction_169
+happyReduction_169 happy_x_1
+	 =  happyIn16
+		 (ITruncFS BS64 BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_170 = happySpecReduce_1  10# happyReduction_170
+happyReduction_170 happy_x_1
+	 =  happyIn16
+		 (ITruncFU BS64 BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_171 = happySpecReduce_1  10# happyReduction_171
+happyReduction_171 happy_x_1
+	 =  happyIn16
+		 (ITruncFS BS64 BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_172 = happySpecReduce_1  10# happyReduction_172
+happyReduction_172 happy_x_1
+	 =  happyIn16
+		 (ITruncFU BS64 BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_173 = happySpecReduce_1  10# happyReduction_173
+happyReduction_173 happy_x_1
+	 =  happyIn16
+		 (FConvertIS BS32 BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_174 = happySpecReduce_1  10# happyReduction_174
+happyReduction_174 happy_x_1
+	 =  happyIn16
+		 (FConvertIU BS32 BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_175 = happySpecReduce_1  10# happyReduction_175
+happyReduction_175 happy_x_1
+	 =  happyIn16
+		 (FConvertIS BS32 BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_176 = happySpecReduce_1  10# happyReduction_176
+happyReduction_176 happy_x_1
+	 =  happyIn16
+		 (FConvertIU BS32 BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_177 = happySpecReduce_1  10# happyReduction_177
+happyReduction_177 happy_x_1
+	 =  happyIn16
+		 (F32DemoteF64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_178 = happySpecReduce_1  10# happyReduction_178
+happyReduction_178 happy_x_1
+	 =  happyIn16
+		 (FConvertIS BS64 BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_179 = happySpecReduce_1  10# happyReduction_179
+happyReduction_179 happy_x_1
+	 =  happyIn16
+		 (FConvertIU BS64 BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_180 = happySpecReduce_1  10# happyReduction_180
+happyReduction_180 happy_x_1
+	 =  happyIn16
+		 (FConvertIS BS64 BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_181 = happySpecReduce_1  10# happyReduction_181
+happyReduction_181 happy_x_1
+	 =  happyIn16
+		 (FConvertIU BS64 BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_182 = happySpecReduce_1  10# happyReduction_182
+happyReduction_182 happy_x_1
+	 =  happyIn16
+		 (F64PromoteF32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_183 = happySpecReduce_1  10# happyReduction_183
+happyReduction_183 happy_x_1
+	 =  happyIn16
+		 (IReinterpretF BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_184 = happySpecReduce_1  10# happyReduction_184
+happyReduction_184 happy_x_1
+	 =  happyIn16
+		 (IReinterpretF BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_185 = happySpecReduce_1  10# happyReduction_185
+happyReduction_185 happy_x_1
+	 =  happyIn16
+		 (FReinterpretI BS32
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_186 = happySpecReduce_1  10# happyReduction_186
+happyReduction_186 happy_x_1
+	 =  happyIn16
+		 (FReinterpretI BS64
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_187 = happySpecReduce_2  11# happyReduction_187
+happyReduction_187 happy_x_2
+	happy_x_1
+	 =  case happyOut18 happy_x_2 of { happy_var_2 -> 
+	happyIn17
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_188 = happySpecReduce_0  11# happyReduction_188
+happyReduction_188  =  happyIn17
+		 (AnonimousTypeUse $ FuncType [] []
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_189 = happyReduce 4# 12# happyReduction_189
+happyReduction_189 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut10 happy_x_2 of { happy_var_2 -> 
+	case happyOut19 happy_x_4 of { happy_var_4 -> 
+	happyIn18
+		 (IndexedTypeUse happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_190 = happySpecReduce_1  12# happyReduction_190
+happyReduction_190 happy_x_1
+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
+	happyIn18
+		 (AnonimousTypeUse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_191 = happySpecReduce_2  13# happyReduction_191
+happyReduction_191 happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> 
+	happyIn19
+		 (Just happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_192 = happySpecReduce_0  13# happyReduction_192
+happyReduction_192  =  happyIn19
+		 (Nothing
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_193 = happyReduce 4# 14# happyReduction_193
+happyReduction_193 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut21 happy_x_3 of { happy_var_3 -> 
+	happyIn20
+		 (TypeDef happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_194 = happySpecReduce_3  15# happyReduction_194
+happyReduction_194 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut22 happy_x_3 of { happy_var_3 -> 
+	happyIn21
+		 (happy_var_3
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_195 = happySpecReduce_1  16# happyReduction_195
+happyReduction_195 happy_x_1
+	 =  happyIn22
+		 (emptyFuncType
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_196 = happySpecReduce_2  16# happyReduction_196
+happyReduction_196 happy_x_2
+	happy_x_1
+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> 
+	happyIn22
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_197 = happyReduce 4# 17# happyReduction_197
+happyReduction_197 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut22 happy_x_4 of { happy_var_4 -> 
+	happyIn23
+		 (mergeFuncType (FuncType (map (ParamType Nothing) happy_var_2) []) happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_198 = happyReduce 5# 17# happyReduction_198
+happyReduction_198 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut8 happy_x_2 of { happy_var_2 -> 
+	case happyOut9 happy_x_3 of { happy_var_3 -> 
+	case happyOut22 happy_x_5 of { happy_var_5 -> 
+	happyIn23
+		 (mergeFuncType (FuncType [ParamType (Just happy_var_2) happy_var_3] []) happy_var_5
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_199 = happySpecReduce_1  17# happyReduction_199
+happyReduction_199 happy_x_1
+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> 
+	happyIn23
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_200 = happySpecReduce_1  18# happyReduction_200
+happyReduction_200 happy_x_1
+	 =  happyIn24
+		 (emptyFuncType
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_201 = happySpecReduce_2  18# happyReduction_201
+happyReduction_201 happy_x_2
+	happy_x_1
+	 =  case happyOut25 happy_x_2 of { happy_var_2 -> 
+	happyIn24
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_202 = happyReduce 4# 19# happyReduction_202
+happyReduction_202 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut24 happy_x_4 of { happy_var_4 -> 
+	happyIn25
+		 (mergeFuncType (FuncType [] happy_var_2) happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_203 = happySpecReduce_3  20# happyReduction_203
+happyReduction_203 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> 
+	case happyOut27 happy_x_3 of { happy_var_3 -> 
+	happyIn26
+		 (mergeFuncType happy_var_1 happy_var_3
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_204 = happySpecReduce_1  20# happyReduction_204
+happyReduction_204 happy_x_1
+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> 
+	happyIn26
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_205 = happySpecReduce_3  21# happyReduction_205
+happyReduction_205 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut117 happy_x_2 of { happy_var_2 -> 
+	happyIn27
+		 (FuncType (map (ParamType Nothing) happy_var_2) []
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_206 = happyReduce 4# 21# happyReduction_206
+happyReduction_206 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut8 happy_x_2 of { happy_var_2 -> 
+	case happyOut9 happy_x_3 of { happy_var_3 -> 
+	happyIn27
+		 (FuncType [ParamType (Just happy_var_2) happy_var_3] []
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_207 = happySpecReduce_3  21# happyReduction_207
+happyReduction_207 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut117 happy_x_2 of { happy_var_2 -> 
+	happyIn27
+		 (FuncType [] happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_208 = happyMonadReduce 2# 22# happyReduction_208
+happyReduction_208 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut121 happy_x_1 of { happy_var_1 -> 
+	case happyOut118 happy_x_2 of { happy_var_2 -> 
+	( parseMemArg 1 happy_var_1 happy_var_2)}})
+	) (\r -> happyReturn (happyIn28 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_209 = happyMonadReduce 2# 23# happyReduction_209
+happyReduction_209 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut121 happy_x_1 of { happy_var_1 -> 
+	case happyOut118 happy_x_2 of { happy_var_2 -> 
+	( parseMemArg 2 happy_var_1 happy_var_2)}})
+	) (\r -> happyReturn (happyIn29 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_210 = happyMonadReduce 2# 24# happyReduction_210
+happyReduction_210 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut121 happy_x_1 of { happy_var_1 -> 
+	case happyOut118 happy_x_2 of { happy_var_2 -> 
+	( parseMemArg 4 happy_var_1 happy_var_2)}})
+	) (\r -> happyReturn (happyIn30 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_211 = happyMonadReduce 2# 25# happyReduction_211
+happyReduction_211 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut121 happy_x_1 of { happy_var_1 -> 
+	case happyOut118 happy_x_2 of { happy_var_2 -> 
+	( parseMemArg 8 happy_var_1 happy_var_2)}})
+	) (\r -> happyReturn (happyIn31 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_212 = happySpecReduce_1  26# happyReduction_212
+happyReduction_212 happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_213 = happySpecReduce_1  26# happyReduction_213
+happyReduction_213 happy_x_1
+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> 
+	happyIn32
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_214 = happySpecReduce_1  27# happyReduction_214
+happyReduction_214 happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	happyIn33
+		 ([PlainInstr happy_var_1]
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_215 = happySpecReduce_2  27# happyReduction_215
+happyReduction_215 happy_x_2
+	happy_x_1
+	 =  case happyOut41 happy_x_2 of { happy_var_2 -> 
+	happyIn33
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_216 = happyMonadReduce 3# 27# happyReduction_216
+happyReduction_216 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut34 happy_x_3 of { happy_var_3 -> 
+	( (: []) `fmap` happy_var_3 happy_var_2)}})
+	) (\r -> happyReturn (happyIn33 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_217 = happyMonadReduce 3# 27# happyReduction_217
+happyReduction_217 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut36 happy_x_3 of { happy_var_3 -> 
+	( (: []) `fmap` happy_var_3 happy_var_2)}})
+	) (\r -> happyReturn (happyIn33 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_218 = happyMonadReduce 3# 27# happyReduction_218
+happyReduction_218 (happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut38 happy_x_3 of { happy_var_3 -> 
+	( happy_var_3 happy_var_2)}})
+	) (\r -> happyReturn (happyIn33 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_219 = happySpecReduce_2  28# happyReduction_219
+happyReduction_219 happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	happyIn34
+		 (\ident ->
+            if ident == happy_var_2 || isNothing happy_var_2
+            then Right $ BlockInstr ident [] []
+            else Left "Block labels have to match"
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_220 = happyReduce 4# 28# happyReduction_220
+happyReduction_220 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	case happyOut119 happy_x_4 of { happy_var_4 -> 
+	happyIn34
+		 (\ident ->
+            if ident == happy_var_4 || isNothing happy_var_4
+            then Right $ BlockInstr ident [] (happy_var_1 ++ concat happy_var_2)
+            else Left "Block labels have to match"
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_221 = happySpecReduce_2  28# happyReduction_221
+happyReduction_221 happy_x_2
+	happy_x_1
+	 =  case happyOut35 happy_x_2 of { happy_var_2 -> 
+	happyIn34
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_222 = happyReduce 6# 29# happyReduction_222
+happyReduction_222 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut9 happy_x_2 of { happy_var_2 -> 
+	case happyOut113 happy_x_4 of { happy_var_4 -> 
+	case happyOut119 happy_x_6 of { happy_var_6 -> 
+	happyIn35
+		 (\ident ->
+            if ident == happy_var_6 || isNothing happy_var_6
+            then Right $ BlockInstr ident [happy_var_2] (concat happy_var_4)
+            else Left "Block labels have to match"
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_223 = happyReduce 4# 29# happyReduction_223
+happyReduction_223 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	case happyOut119 happy_x_4 of { happy_var_4 -> 
+	happyIn35
+		 (\ident ->
+            if ident == happy_var_4 || isNothing happy_var_4
+            then Right $ BlockInstr ident [] (happy_var_1 ++ concat happy_var_2)
+            else Left "Block labels have to match"
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_224 = happySpecReduce_2  30# happyReduction_224
+happyReduction_224 happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	happyIn36
+		 (\ident ->
+            if ident == happy_var_2 || isNothing happy_var_2
+            then Right $ LoopInstr ident [] []
+            else Left "Loop labels have to match"
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_225 = happyReduce 4# 30# happyReduction_225
+happyReduction_225 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	case happyOut119 happy_x_4 of { happy_var_4 -> 
+	happyIn36
+		 (\ident ->
+            if ident == happy_var_4 || isNothing happy_var_4
+            then Right $ LoopInstr ident [] (happy_var_1 ++ concat happy_var_2)
+            else Left "Loop labels have to match"
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_226 = happySpecReduce_2  30# happyReduction_226
+happyReduction_226 happy_x_2
+	happy_x_1
+	 =  case happyOut37 happy_x_2 of { happy_var_2 -> 
+	happyIn36
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_227 = happyReduce 6# 31# happyReduction_227
+happyReduction_227 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut9 happy_x_2 of { happy_var_2 -> 
+	case happyOut113 happy_x_4 of { happy_var_4 -> 
+	case happyOut119 happy_x_6 of { happy_var_6 -> 
+	happyIn37
+		 (\ident ->
+            if ident == happy_var_6 || isNothing happy_var_6
+            then Right $ LoopInstr ident [happy_var_2] (concat happy_var_4)
+            else Left "Loop labels have to match"
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_228 = happyReduce 4# 31# happyReduction_228
+happyReduction_228 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	case happyOut119 happy_x_4 of { happy_var_4 -> 
+	happyIn37
+		 (\ident ->
+            if ident == happy_var_4 || isNothing happy_var_4
+            then Right $ LoopInstr ident [] (happy_var_1 ++ concat happy_var_2)
+            else Left "Loop labels have to match"
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_229 = happySpecReduce_1  32# happyReduction_229
+happyReduction_229 happy_x_1
+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> 
+	happyIn38
+		 (\ident ->
+            if ident == (snd happy_var_1) || isNothing (snd happy_var_1)
+            then Right [IfInstr ident [] [] $ fst happy_var_1]
+            else Left "If labels have to match"
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_230 = happySpecReduce_3  32# happyReduction_230
+happyReduction_230 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	case happyOut40 happy_x_3 of { happy_var_3 -> 
+	happyIn38
+		 (\ident ->
+            if ident == (snd happy_var_3) || isNothing (snd happy_var_3)
+            then Right [IfInstr ident [] (happy_var_1 ++ concat happy_var_2) $ fst happy_var_3]
+            else Left "If labels have to match"
+	)}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_231 = happySpecReduce_2  32# happyReduction_231
+happyReduction_231 happy_x_2
+	happy_x_1
+	 =  case happyOut39 happy_x_2 of { happy_var_2 -> 
+	happyIn38
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_232 = happyReduce 5# 33# happyReduction_232
+happyReduction_232 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut9 happy_x_2 of { happy_var_2 -> 
+	case happyOut113 happy_x_4 of { happy_var_4 -> 
+	case happyOut40 happy_x_5 of { happy_var_5 -> 
+	happyIn39
+		 (\ident ->
+            if ident == (snd happy_var_5) || isNothing (snd happy_var_5)
+            then Right [IfInstr ident [happy_var_2] (concat happy_var_4) $ fst happy_var_5]
+            else Left "If labels have to match"
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_233 = happySpecReduce_3  33# happyReduction_233
+happyReduction_233 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	case happyOut40 happy_x_3 of { happy_var_3 -> 
+	happyIn39
+		 (\ident ->
+            if ident == (snd happy_var_3) || isNothing (snd happy_var_3)
+            then Right [IfInstr ident [] (happy_var_1 ++ concat happy_var_2) $ fst happy_var_3]
+            else Left "If labels have to match"
+	)}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_234 = happySpecReduce_2  34# happyReduction_234
+happyReduction_234 happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	happyIn40
+		 (([], happy_var_2)
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_235 = happyMonadReduce 5# 34# happyReduction_235
+happyReduction_235 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut113 happy_x_3 of { happy_var_3 -> 
+	case happyOut119 happy_x_5 of { happy_var_5 -> 
+	(
+        if matchIdents happy_var_2 happy_var_5
+        then Right (concat happy_var_3, if isNothing happy_var_2 then happy_var_5 else happy_var_2)
+        else Left "If labels have to match")}}})
+	) (\r -> happyReturn (happyIn40 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_236 = happySpecReduce_2  35# happyReduction_236
+happyReduction_236 happy_x_2
+	happy_x_1
+	 =  case happyOut42 happy_x_2 of { happy_var_2 -> 
+	happyIn41
+		 ((PlainInstr $ CallIndirect $ fst happy_var_2) : snd happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_237 = happySpecReduce_0  35# happyReduction_237
+happyReduction_237  =  happyIn41
+		 ([PlainInstr $ CallIndirect $ AnonimousTypeUse $ FuncType [] []]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_238 = happyReduce 4# 36# happyReduction_238
+happyReduction_238 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut10 happy_x_2 of { happy_var_2 -> 
+	case happyOut43 happy_x_4 of { happy_var_4 -> 
+	happyIn42
+		 ((IndexedTypeUse happy_var_2 $ fst happy_var_4, snd happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_239 = happySpecReduce_1  36# happyReduction_239
+happyReduction_239 happy_x_1
+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> 
+	happyIn42
+		 ((AnonimousTypeUse $ fromMaybe (FuncType [] []) $ fst happy_var_1, snd happy_var_1)
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_240 = happySpecReduce_2  37# happyReduction_240
+happyReduction_240 happy_x_2
+	happy_x_1
+	 =  case happyOut44 happy_x_2 of { happy_var_2 -> 
+	happyIn43
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_241 = happySpecReduce_0  37# happyReduction_241
+happyReduction_241  =  happyIn43
+		 ((Nothing, [])
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_242 = happyReduce 4# 38# happyReduction_242
+happyReduction_242 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut43 happy_x_4 of { happy_var_4 -> 
+	happyIn44
+		 (let ft = fromMaybe emptyFuncType $ fst happy_var_4 in
+        (Just $ ft { params = map (ParamType Nothing) happy_var_2 ++ params ft }, snd happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_243 = happySpecReduce_1  38# happyReduction_243
+happyReduction_243 happy_x_1
+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> 
+	happyIn44
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_244 = happySpecReduce_2  39# happyReduction_244
+happyReduction_244 happy_x_2
+	happy_x_1
+	 =  case happyOut46 happy_x_2 of { happy_var_2 -> 
+	happyIn45
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_245 = happySpecReduce_0  39# happyReduction_245
+happyReduction_245  =  happyIn45
+		 ((Nothing, [])
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_246 = happyReduce 4# 40# happyReduction_246
+happyReduction_246 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut45 happy_x_4 of { happy_var_4 -> 
+	happyIn46
+		 (let ft = fromMaybe emptyFuncType $ fst happy_var_4 in
+        (Just $ ft { results = happy_var_2 ++ results ft }, snd happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_247 = happySpecReduce_1  40# happyReduction_247
+happyReduction_247 happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	happyIn46
+		 ((Nothing, happy_var_1)
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_248 = happySpecReduce_2  41# happyReduction_248
+happyReduction_248 happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_2 of { happy_var_2 -> 
+	happyIn47
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_249 = happySpecReduce_3  42# happyReduction_249
+happyReduction_249 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> 
+	case happyOut111 happy_x_2 of { happy_var_2 -> 
+	happyIn48
+		 (concat happy_var_2 ++ [PlainInstr happy_var_1]
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_250 = happySpecReduce_2  42# happyReduction_250
+happyReduction_250 happy_x_2
+	happy_x_1
+	 =  case happyOut56 happy_x_2 of { happy_var_2 -> 
+	happyIn48
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_251 = happySpecReduce_3  42# happyReduction_251
+happyReduction_251 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut49 happy_x_3 of { happy_var_3 -> 
+	happyIn48
+		 ([happy_var_3 happy_var_2]
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_252 = happySpecReduce_3  42# happyReduction_252
+happyReduction_252 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut51 happy_x_3 of { happy_var_3 -> 
+	happyIn48
+		 ([happy_var_3 happy_var_2]
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_253 = happyReduce 4# 42# happyReduction_253
+happyReduction_253 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut53 happy_x_4 of { happy_var_4 -> 
+	happyIn48
+		 (happy_var_4 happy_var_2
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_254 = happySpecReduce_1  43# happyReduction_254
+happyReduction_254 happy_x_1
+	 =  happyIn49
+		 (\ident -> BlockInstr ident [] []
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_255 = happySpecReduce_2  43# happyReduction_255
+happyReduction_255 happy_x_2
+	happy_x_1
+	 =  case happyOut50 happy_x_2 of { happy_var_2 -> 
+	happyIn49
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_256 = happySpecReduce_3  43# happyReduction_256
+happyReduction_256 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn49
+		 (\ident -> BlockInstr ident [] (happy_var_1 ++ concat happy_var_2)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_257 = happyReduce 5# 44# happyReduction_257
+happyReduction_257 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut9 happy_x_2 of { happy_var_2 -> 
+	case happyOut113 happy_x_4 of { happy_var_4 -> 
+	happyIn50
+		 (\ident -> BlockInstr ident [happy_var_2] (concat happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_258 = happySpecReduce_3  44# happyReduction_258
+happyReduction_258 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn50
+		 (\ident -> BlockInstr ident [] (happy_var_1 ++ concat happy_var_2)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_259 = happySpecReduce_1  45# happyReduction_259
+happyReduction_259 happy_x_1
+	 =  happyIn51
+		 (\ident -> LoopInstr ident [] []
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_260 = happySpecReduce_2  45# happyReduction_260
+happyReduction_260 happy_x_2
+	happy_x_1
+	 =  case happyOut52 happy_x_2 of { happy_var_2 -> 
+	happyIn51
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_261 = happySpecReduce_3  45# happyReduction_261
+happyReduction_261 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn51
+		 (\ident -> LoopInstr ident [] (happy_var_1 ++ concat happy_var_2)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_262 = happyReduce 5# 46# happyReduction_262
+happyReduction_262 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut9 happy_x_2 of { happy_var_2 -> 
+	case happyOut113 happy_x_4 of { happy_var_4 -> 
+	happyIn52
+		 (\ident -> LoopInstr ident [happy_var_2] (concat happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_263 = happySpecReduce_3  46# happyReduction_263
+happyReduction_263 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn52
+		 (\ident -> LoopInstr ident [] (happy_var_1 ++ concat happy_var_2)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_264 = happyReduce 5# 47# happyReduction_264
+happyReduction_264 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut9 happy_x_2 of { happy_var_2 -> 
+	case happyOut54 happy_x_5 of { happy_var_5 -> 
+	happyIn53
+		 (\ident ->
+            let (pred, (trueBranch, falseBranch)) = happy_var_5 in
+            pred ++ [IfInstr ident [happy_var_2] trueBranch falseBranch]
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_265 = happySpecReduce_1  47# happyReduction_265
+happyReduction_265 happy_x_1
+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> 
+	happyIn53
+		 (\ident ->
+            let (pred, (trueBranch, falseBranch)) = happy_var_1 in
+            pred ++ [IfInstr ident [] trueBranch falseBranch]
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_266 = happyReduce 4# 48# happyReduction_266
+happyReduction_266 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut113 happy_x_2 of { happy_var_2 -> 
+	case happyOut55 happy_x_4 of { happy_var_4 -> 
+	happyIn54
+		 (([], (concat happy_var_2, happy_var_4))
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_267 = happySpecReduce_3  48# happyReduction_267
+happyReduction_267 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut54 happy_x_3 of { happy_var_3 -> 
+	happyIn54
+		 (let (pred, branches) = happy_var_3 in
+        (happy_var_1 ++ pred, branches)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_268 = happySpecReduce_1  49# happyReduction_268
+happyReduction_268 happy_x_1
+	 =  happyIn55
+		 ([]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_269 = happyReduce 5# 49# happyReduction_269
+happyReduction_269 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut113 happy_x_3 of { happy_var_3 -> 
+	happyIn55
+		 (concat happy_var_3
+	) `HappyStk` happyRest}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_270 = happySpecReduce_1  50# happyReduction_270
+happyReduction_270 happy_x_1
+	 =  happyIn56
+		 ([PlainInstr $ CallIndirect $ AnonimousTypeUse $ FuncType [] []]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_271 = happySpecReduce_2  50# happyReduction_271
+happyReduction_271 happy_x_2
+	happy_x_1
+	 =  case happyOut57 happy_x_2 of { happy_var_2 -> 
+	happyIn56
+		 (snd happy_var_2 ++ [PlainInstr $ CallIndirect $ fst happy_var_2]
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_272 = happyReduce 4# 51# happyReduction_272
+happyReduction_272 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut10 happy_x_2 of { happy_var_2 -> 
+	case happyOut58 happy_x_4 of { happy_var_4 -> 
+	happyIn57
+		 ((IndexedTypeUse happy_var_2 $ fst happy_var_4, snd happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_273 = happySpecReduce_1  51# happyReduction_273
+happyReduction_273 happy_x_1
+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> 
+	happyIn57
+		 ((AnonimousTypeUse $ fromMaybe (FuncType [] []) $ fst happy_var_1, snd happy_var_1)
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_274 = happySpecReduce_2  52# happyReduction_274
+happyReduction_274 happy_x_2
+	happy_x_1
+	 =  case happyOut59 happy_x_2 of { happy_var_2 -> 
+	happyIn58
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_275 = happySpecReduce_1  52# happyReduction_275
+happyReduction_275 happy_x_1
+	 =  happyIn58
+		 ((Nothing, [])
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_276 = happyReduce 4# 53# happyReduction_276
+happyReduction_276 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut58 happy_x_4 of { happy_var_4 -> 
+	happyIn59
+		 (let ft = fromMaybe emptyFuncType $ fst happy_var_4 in
+        (Just $ ft { params = map (ParamType Nothing) happy_var_2 ++ params ft }, snd happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_277 = happySpecReduce_1  53# happyReduction_277
+happyReduction_277 happy_x_1
+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> 
+	happyIn59
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_278 = happySpecReduce_2  54# happyReduction_278
+happyReduction_278 happy_x_2
+	happy_x_1
+	 =  case happyOut61 happy_x_2 of { happy_var_2 -> 
+	happyIn60
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_279 = happySpecReduce_1  54# happyReduction_279
+happyReduction_279 happy_x_1
+	 =  happyIn60
+		 ((Nothing, [])
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_280 = happyReduce 4# 55# happyReduction_280
+happyReduction_280 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut60 happy_x_4 of { happy_var_4 -> 
+	happyIn61
+		 (let ft = fromMaybe emptyFuncType $ fst happy_var_4 in
+        (Just $ ft { results = happy_var_2 ++ results ft }, snd happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_281 = happySpecReduce_3  55# happyReduction_281
+happyReduction_281 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut111 happy_x_2 of { happy_var_2 -> 
+	happyIn61
+		 ((Nothing, happy_var_1 ++ concat happy_var_2)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_282 = happyReduce 4# 56# happyReduction_282
+happyReduction_282 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut17 happy_x_3 of { happy_var_3 -> 
+	happyIn62
+		 (ImportFunc happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_283 = happyReduce 4# 56# happyReduction_283
+happyReduction_283 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut86 happy_x_3 of { happy_var_3 -> 
+	happyIn62
+		 (ImportTable happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_284 = happyReduce 4# 56# happyReduction_284
+happyReduction_284 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut84 happy_x_3 of { happy_var_3 -> 
+	happyIn62
+		 (ImportMemory happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_285 = happyReduce 4# 56# happyReduction_285
+happyReduction_285 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut76 happy_x_3 of { happy_var_3 -> 
+	happyIn62
+		 (ImportGlobal happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_286 = happyReduce 6# 57# happyReduction_286
+happyReduction_286 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut7 happy_x_3 of { happy_var_3 -> 
+	case happyOut62 happy_x_5 of { happy_var_5 -> 
+	happyIn63
+		 (Import [] happy_var_2 happy_var_3 happy_var_5
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_287 = happySpecReduce_3  58# happyReduction_287
+happyReduction_287 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut65 happy_x_3 of { happy_var_3 -> 
+	happyIn64
+		 (happy_var_3 happy_var_2
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_288 = happySpecReduce_1  59# happyReduction_288
+happyReduction_288 happy_x_1
+	 =  happyIn65
+		 (\i -> MFFunc emptyFunction { ident = i }
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_289 = happySpecReduce_3  59# happyReduction_289
+happyReduction_289 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn65
+		 (\i -> MFFunc emptyFunction { ident = i, body = happy_var_1 ++ concat happy_var_2 }
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_290 = happySpecReduce_2  59# happyReduction_290
+happyReduction_290 happy_x_2
+	happy_x_1
+	 =  case happyOut66 happy_x_2 of { happy_var_2 -> 
+	happyIn65
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_291 = happyReduce 4# 60# happyReduction_291
+happyReduction_291 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut65 happy_x_4 of { happy_var_4 -> 
+	happyIn66
+		 (\ident ->
+            case happy_var_4 ident of
+                MFImport imp -> MFImport imp { reExportAs = happy_var_2 : reExportAs imp }
+                MFFunc func -> MFFunc func { exportFuncAs = happy_var_2 : exportFuncAs func }
+                _ -> error "unexpected field"
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_292 = happySpecReduce_1  60# happyReduction_292
+happyReduction_292 happy_x_1
+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> 
+	happyIn66
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_293 = happyReduce 6# 61# happyReduction_293
+happyReduction_293 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut7 happy_x_3 of { happy_var_3 -> 
+	case happyOut17 happy_x_5 of { happy_var_5 -> 
+	happyIn67
+		 (\ident -> MFImport $ Import [] happy_var_2 happy_var_3 $ ImportFunc ident happy_var_5
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_294 = happySpecReduce_1  61# happyReduction_294
+happyReduction_294 happy_x_1
+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> 
+	happyIn67
+		 (MFFunc . happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_295 = happyReduce 4# 62# happyReduction_295
+happyReduction_295 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut10 happy_x_2 of { happy_var_2 -> 
+	case happyOut69 happy_x_4 of { happy_var_4 -> 
+	happyIn68
+		 (\i ->
+            let (AnonimousTypeUse signature) = funcType happy_var_4 in
+            let typeSign = if signature == emptyFuncType then Nothing else Just signature in
+            happy_var_4 { funcType = IndexedTypeUse happy_var_2 typeSign, ident = i }
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_296 = happySpecReduce_1  62# happyReduction_296
+happyReduction_296 happy_x_1
+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> 
+	happyIn68
+		 (\i -> happy_var_1 { ident = i }
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_297 = happySpecReduce_1  63# happyReduction_297
+happyReduction_297 happy_x_1
+	 =  happyIn69
+		 (emptyFunction
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_298 = happySpecReduce_2  63# happyReduction_298
+happyReduction_298 happy_x_2
+	happy_x_1
+	 =  case happyOut70 happy_x_2 of { happy_var_2 -> 
+	happyIn69
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_299 = happyReduce 4# 64# happyReduction_299
+happyReduction_299 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut69 happy_x_4 of { happy_var_4 -> 
+	happyIn70
+		 (prependFuncParams (map (ParamType Nothing) happy_var_2) happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_300 = happyReduce 5# 64# happyReduction_300
+happyReduction_300 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut8 happy_x_2 of { happy_var_2 -> 
+	case happyOut9 happy_x_3 of { happy_var_3 -> 
+	case happyOut69 happy_x_5 of { happy_var_5 -> 
+	happyIn70
+		 (prependFuncParams [ParamType (Just happy_var_2) happy_var_3] happy_var_5
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_301 = happySpecReduce_1  64# happyReduction_301
+happyReduction_301 happy_x_1
+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> 
+	happyIn70
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_302 = happySpecReduce_1  65# happyReduction_302
+happyReduction_302 happy_x_1
+	 =  happyIn71
+		 (emptyFunction
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_303 = happySpecReduce_2  65# happyReduction_303
+happyReduction_303 happy_x_2
+	happy_x_1
+	 =  case happyOut72 happy_x_2 of { happy_var_2 -> 
+	happyIn71
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_304 = happySpecReduce_3  65# happyReduction_304
+happyReduction_304 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn71
+		 (emptyFunction { body = happy_var_1 ++ concat happy_var_2 }
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_305 = happyReduce 4# 66# happyReduction_305
+happyReduction_305 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut71 happy_x_4 of { happy_var_4 -> 
+	happyIn72
+		 (prependFuncResults happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_306 = happySpecReduce_1  66# happyReduction_306
+happyReduction_306 happy_x_1
+	 =  case happyOut74 happy_x_1 of { happy_var_1 -> 
+	happyIn72
+		 (emptyFunction { locals = fst happy_var_1, body = snd happy_var_1 }
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_307 = happySpecReduce_1  67# happyReduction_307
+happyReduction_307 happy_x_1
+	 =  happyIn73
+		 (([], [])
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_308 = happySpecReduce_3  67# happyReduction_308
+happyReduction_308 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn73
+		 (([], happy_var_1 ++ concat happy_var_2)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_309 = happySpecReduce_2  67# happyReduction_309
+happyReduction_309 happy_x_2
+	happy_x_1
+	 =  case happyOut74 happy_x_2 of { happy_var_2 -> 
+	happyIn73
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_310 = happyReduce 4# 68# happyReduction_310
+happyReduction_310 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut117 happy_x_2 of { happy_var_2 -> 
+	case happyOut73 happy_x_4 of { happy_var_4 -> 
+	happyIn74
+		 ((map (LocalType Nothing) happy_var_2 ++ fst happy_var_4, snd happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_311 = happyReduce 5# 68# happyReduction_311
+happyReduction_311 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut8 happy_x_2 of { happy_var_2 -> 
+	case happyOut9 happy_x_3 of { happy_var_3 -> 
+	case happyOut73 happy_x_5 of { happy_var_5 -> 
+	happyIn74
+		 ((LocalType (Just happy_var_2) happy_var_3 : fst happy_var_5, snd happy_var_5)
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_312 = happySpecReduce_3  68# happyReduction_312
+happyReduction_312 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn74
+		 (([], happy_var_1 ++ concat happy_var_2)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_313 = happySpecReduce_3  69# happyReduction_313
+happyReduction_313 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut77 happy_x_3 of { happy_var_3 -> 
+	happyIn75
+		 (happy_var_3 happy_var_2
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_314 = happySpecReduce_1  70# happyReduction_314
+happyReduction_314 happy_x_1
+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
+	happyIn76
+		 (Const happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_315 = happyReduce 4# 70# happyReduction_315
+happyReduction_315 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut9 happy_x_3 of { happy_var_3 -> 
+	happyIn76
+		 (Mut happy_var_3
+	) `HappyStk` happyRest}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_316 = happySpecReduce_3  71# happyReduction_316
+happyReduction_316 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> 
+	case happyOut113 happy_x_2 of { happy_var_2 -> 
+	happyIn77
+		 (\ident -> MFGlobal $ Global [] ident (Const happy_var_1) $ concat happy_var_2
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_317 = happySpecReduce_2  71# happyReduction_317
+happyReduction_317 happy_x_2
+	happy_x_1
+	 =  case happyOut78 happy_x_2 of { happy_var_2 -> 
+	happyIn77
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_318 = happyReduce 5# 72# happyReduction_318
+happyReduction_318 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut9 happy_x_2 of { happy_var_2 -> 
+	case happyOut113 happy_x_4 of { happy_var_4 -> 
+	happyIn78
+		 (\ident -> MFGlobal $ Global [] ident (Mut happy_var_2) $ concat happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_319 = happyReduce 4# 72# happyReduction_319
+happyReduction_319 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut77 happy_x_4 of { happy_var_4 -> 
+	happyIn78
+		 (\ident ->
+            case happy_var_4 ident of
+                MFImport imp -> MFImport imp { reExportAs = happy_var_2 : reExportAs imp }
+                MFGlobal global -> MFGlobal global { exportGlobalAs = happy_var_2 : exportGlobalAs global }
+                _ -> error "unexpected field"
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_320 = happyReduce 6# 72# happyReduction_320
+happyReduction_320 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut7 happy_x_3 of { happy_var_3 -> 
+	case happyOut76 happy_x_5 of { happy_var_5 -> 
+	happyIn78
+		 (\ident -> MFImport $ Import [] happy_var_2 happy_var_3 $ ImportGlobal ident happy_var_5
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_321 = happySpecReduce_3  73# happyReduction_321
+happyReduction_321 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut80 happy_x_3 of { happy_var_3 -> 
+	happyIn79
+		 (happy_var_3 happy_var_2
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_322 = happySpecReduce_1  74# happyReduction_322
+happyReduction_322 happy_x_1
+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> 
+	happyIn80
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_323 = happySpecReduce_2  74# happyReduction_323
+happyReduction_323 happy_x_2
+	happy_x_1
+	 =  case happyOut82 happy_x_2 of { happy_var_2 -> 
+	happyIn80
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_324 = happySpecReduce_1  75# happyReduction_324
+happyReduction_324 happy_x_1
+	 =  case happyOut115 happy_x_1 of { happy_var_1 -> 
+	happyIn81
+		 (LBS.concat happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_325 = happyReduce 4# 76# happyReduction_325
+happyReduction_325 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut80 happy_x_4 of { happy_var_4 -> 
+	happyIn82
+		 (\ident ->
+            case happy_var_4 ident of
+                [MFImport imp] -> [MFImport imp { reExportAs = happy_var_2 : reExportAs imp }]
+                (MFMem (Memory exps i l)):rest -> (MFMem (Memory (happy_var_2:exps) i l)):rest
+                _ -> error "unexpected field"
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_326 = happyReduce 6# 76# happyReduction_326
+happyReduction_326 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut7 happy_x_3 of { happy_var_3 -> 
+	case happyOut84 happy_x_5 of { happy_var_5 -> 
+	happyIn82
+		 (\ident -> [MFImport $ Import [] happy_var_2 happy_var_3 $ ImportMemory ident happy_var_5]
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_327 = happyReduce 4# 76# happyReduction_327
+happyReduction_327 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut81 happy_x_2 of { happy_var_2 -> 
+	happyIn82
+		 (\ident ->
+            let m = fromIntegral $ LBS.length happy_var_2 in
+            [
+                MFMem $ Memory [] ident $ Limit m $ Just m,
+                MFData $ DataSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] happy_var_2
+            ]
+	) `HappyStk` happyRest}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_328 = happySpecReduce_2  77# happyReduction_328
+happyReduction_328 happy_x_2
+	happy_x_1
+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> 
+	happyIn83
+		 (\ident -> [MFMem $ Memory [] ident happy_var_1]
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_329 = happySpecReduce_2  78# happyReduction_329
+happyReduction_329 happy_x_2
+	happy_x_1
+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
+	case happyOut122 happy_x_2 of { happy_var_2 -> 
+	happyIn84
+		 (Limit (fromIntegral happy_var_1) (fromIntegral `fmap` happy_var_2)
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_330 = happySpecReduce_1  79# happyReduction_330
+happyReduction_330 happy_x_1
+	 =  happyIn85
+		 (AnyFunc
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_331 = happySpecReduce_2  80# happyReduction_331
+happyReduction_331 happy_x_2
+	happy_x_1
+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> 
+	case happyOut85 happy_x_2 of { happy_var_2 -> 
+	happyIn86
+		 (TableType happy_var_1 happy_var_2
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_332 = happySpecReduce_3  81# happyReduction_332
+happyReduction_332 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut88 happy_x_3 of { happy_var_3 -> 
+	happyIn87
+		 (happy_var_3 happy_var_2
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_333 = happySpecReduce_2  82# happyReduction_333
+happyReduction_333 happy_x_2
+	happy_x_1
+	 =  case happyOut86 happy_x_1 of { happy_var_1 -> 
+	happyIn88
+		 (\ident -> [MFTable $ Table [] ident happy_var_1]
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_334 = happyReduce 6# 82# happyReduction_334
+happyReduction_334 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut85 happy_x_1 of { happy_var_1 -> 
+	case happyOut112 happy_x_4 of { happy_var_4 -> 
+	happyIn88
+		 (\ident ->
+            let funcsLen = fromIntegral $ length happy_var_4 in [
+                MFTable $ Table [] ident $ TableType (Limit funcsLen (Just funcsLen)) happy_var_1,
+                MFElem $ ElemSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] happy_var_4
+            ]
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_335 = happySpecReduce_2  82# happyReduction_335
+happyReduction_335 happy_x_2
+	happy_x_1
+	 =  case happyOut89 happy_x_2 of { happy_var_2 -> 
+	happyIn88
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_336 = happyReduce 6# 83# happyReduction_336
+happyReduction_336 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut7 happy_x_3 of { happy_var_3 -> 
+	case happyOut86 happy_x_5 of { happy_var_5 -> 
+	happyIn89
+		 (\ident -> [MFImport $ Import [] happy_var_2 happy_var_3 $ ImportTable ident happy_var_5]
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_337 = happyReduce 4# 83# happyReduction_337
+happyReduction_337 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut88 happy_x_4 of { happy_var_4 -> 
+	happyIn89
+		 (\ident ->
+            case happy_var_4 ident of
+                [MFImport imp] -> [MFImport imp { reExportAs = happy_var_2 : reExportAs imp }]
+                (MFTable (Table exps i t)):rest -> (MFTable (Table (happy_var_2:exps) i t)):rest
+                _ -> error "unexpected field"
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_338 = happySpecReduce_3  84# happyReduction_338
+happyReduction_338 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn90
+		 (ExportFunc happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_339 = happySpecReduce_3  84# happyReduction_339
+happyReduction_339 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn90
+		 (ExportTable happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_340 = happySpecReduce_3  84# happyReduction_340
+happyReduction_340 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn90
+		 (ExportMemory happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_341 = happySpecReduce_3  84# happyReduction_341
+happyReduction_341 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn90
+		 (ExportGlobal happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_342 = happyReduce 5# 85# happyReduction_342
+happyReduction_342 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut7 happy_x_2 of { happy_var_2 -> 
+	case happyOut90 happy_x_4 of { happy_var_4 -> 
+	happyIn91
+		 (Export happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_343 = happySpecReduce_3  86# happyReduction_343
+happyReduction_343 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn92
+		 (StartFunction happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_344 = happySpecReduce_3  87# happyReduction_344
+happyReduction_344 happy_x_3
+	happy_x_2
+	happy_x_1
+	 =  case happyOut111 happy_x_2 of { happy_var_2 -> 
+	happyIn93
+		 (concat happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_345 = happySpecReduce_1  87# happyReduction_345
+happyReduction_345 happy_x_1
+	 =  case happyOut48 happy_x_1 of { happy_var_1 -> 
+	happyIn93
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_346 = happyReduce 6# 88# happyReduction_346
+happyReduction_346 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut120 happy_x_2 of { happy_var_2 -> 
+	case happyOut93 happy_x_4 of { happy_var_4 -> 
+	case happyOut112 happy_x_5 of { happy_var_5 -> 
+	happyIn94
+		 (ElemSegment (fromMaybe (Index 0) happy_var_2) happy_var_4 happy_var_5
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_347 = happyReduce 6# 89# happyReduction_347
+happyReduction_347 (happy_x_6 `HappyStk`
+	happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut120 happy_x_2 of { happy_var_2 -> 
+	case happyOut93 happy_x_4 of { happy_var_4 -> 
+	case happyOut81 happy_x_5 of { happy_var_5 -> 
+	happyIn95
+		 (DataSegment (fromMaybe (Index 0) happy_var_2) happy_var_4 happy_var_5
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_348 = happySpecReduce_1  90# happyReduction_348
+happyReduction_348 happy_x_1
+	 =  case happyOut20 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (MFType happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_349 = happySpecReduce_1  90# happyReduction_349
+happyReduction_349 happy_x_1
+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (MFImport happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_350 = happySpecReduce_1  90# happyReduction_350
+happyReduction_350 happy_x_1
+	 =  case happyOut91 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (MFExport happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_351 = happySpecReduce_1  90# happyReduction_351
+happyReduction_351 happy_x_1
+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (MFStart happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_352 = happySpecReduce_1  90# happyReduction_352
+happyReduction_352 happy_x_1
+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (MFElem happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_353 = happySpecReduce_1  90# happyReduction_353
+happyReduction_353 happy_x_1
+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (MFData happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_354 = happySpecReduce_1  90# happyReduction_354
+happyReduction_354 happy_x_1
+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_355 = happySpecReduce_1  90# happyReduction_355
+happyReduction_355 happy_x_1
+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> 
+	happyIn96
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_356 = happySpecReduce_1  91# happyReduction_356
+happyReduction_356 happy_x_1
+	 =  case happyOut87 happy_x_1 of { happy_var_1 -> 
+	happyIn97
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_357 = happySpecReduce_1  91# happyReduction_357
+happyReduction_357 happy_x_1
+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> 
+	happyIn97
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_358 = happySpecReduce_1  92# happyReduction_358
+happyReduction_358 happy_x_1
+	 =  case happyOut96 happy_x_1 of { happy_var_1 -> 
+	happyIn98
+		 ([happy_var_1]
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_359 = happySpecReduce_1  92# happyReduction_359
+happyReduction_359 happy_x_1
+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> 
+	happyIn98
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_360 = happySpecReduce_2  93# happyReduction_360
+happyReduction_360 happy_x_2
+	happy_x_1
+	 =  case happyOut98 happy_x_2 of { happy_var_2 -> 
+	happyIn99
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_361 = happyReduce 5# 94# happyReduction_361
+happyReduction_361 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut114 happy_x_3 of { happy_var_3 -> 
+	happyIn100
+		 (concat happy_var_3
+	) `HappyStk` happyRest}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_362 = happyReduce 4# 94# happyReduction_362
+happyReduction_362 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut98 happy_x_2 of { happy_var_2 -> 
+	case happyOut114 happy_x_3 of { happy_var_3 -> 
+	happyIn100
+		 (happy_var_2 ++ concat happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_363 = happyMonadReduce 1# 95# happyReduction_363
+happyReduction_363 (happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut100 happy_x_1 of { happy_var_1 -> 
+	( desugarize happy_var_1)})
+	) (\r -> happyReturn (happyIn101 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_364 = happySpecReduce_2  96# happyReduction_364
+happyReduction_364 happy_x_2
+	happy_x_1
+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> 
+	happyIn102
+		 (happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_365 = happySpecReduce_2  97# happyReduction_365
+happyReduction_365 happy_x_2
+	happy_x_1
+	 =  case happyOut104 happy_x_2 of { happy_var_2 -> 
+	happyIn103
+		 (happy_var_2
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_366 = happySpecReduce_1  98# happyReduction_366
+happyReduction_366 happy_x_1
+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> 
+	happyIn104
+		 (ModuleDef happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_367 = happyReduce 4# 98# happyReduction_367
+happyReduction_367 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut6 happy_x_2 of { happy_var_2 -> 
+	case happyOut119 happy_x_3 of { happy_var_3 -> 
+	happyIn104
+		 (Register happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_368 = happySpecReduce_1  98# happyReduction_368
+happyReduction_368 happy_x_1
+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> 
+	happyIn104
+		 (Action happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_369 = happySpecReduce_1  98# happyReduction_369
+happyReduction_369 happy_x_1
+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> 
+	happyIn104
+		 (Assertion happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_370 = happySpecReduce_1  98# happyReduction_370
+happyReduction_370 happy_x_1
+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> 
+	happyIn104
+		 (Meta happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_371 = happyReduce 5# 99# happyReduction_371
+happyReduction_371 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut81 happy_x_4 of { happy_var_4 -> 
+	happyIn105
+		 (BinaryModDef happy_var_2 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_372 = happyReduce 5# 99# happyReduction_372
+happyReduction_372 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut116 happy_x_4 of { happy_var_4 -> 
+	happyIn105
+		 (TextModDef happy_var_2 (TL.concat happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_373 = happyMonadReduce 4# 99# happyReduction_373
+happyReduction_373 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut114 happy_x_3 of { happy_var_3 -> 
+	( RawModDef happy_var_2 `fmap` (desugarize $ concat happy_var_3))}})
+	) (\r -> happyReturn (happyIn105 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_374 = happyMonadReduce 2# 99# happyReduction_374
+happyReduction_374 (happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest) tk
+	 = happyThen ((case happyOut98 happy_x_1 of { happy_var_1 -> 
+	case happyOut114 happy_x_2 of { happy_var_2 -> 
+	( RawModDef Nothing `fmap` (desugarize $ happy_var_1 ++ concat happy_var_2))}})
+	) (\r -> happyReturn (happyIn105 r))
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_375 = happyReduce 5# 100# happyReduction_375
+happyReduction_375 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut6 happy_x_3 of { happy_var_3 -> 
+	case happyOut111 happy_x_4 of { happy_var_4 -> 
+	happyIn106
+		 (Invoke happy_var_2 happy_var_3 (map (map constInstructionToValue) happy_var_4)
+	) `HappyStk` happyRest}}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_376 = happyReduce 4# 100# happyReduction_376
+happyReduction_376 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut6 happy_x_3 of { happy_var_3 -> 
+	happyIn106
+		 (Get happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_377 = happyReduce 5# 101# happyReduction_377
+happyReduction_377 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut106 happy_x_3 of { happy_var_3 -> 
+	case happyOut111 happy_x_4 of { happy_var_4 -> 
+	happyIn107
+		 (AssertReturn happy_var_3 (map (map constInstructionToValue) happy_var_4)
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_378 = happyReduce 4# 101# happyReduction_378
+happyReduction_378 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut106 happy_x_3 of { happy_var_3 -> 
+	happyIn107
+		 (AssertReturnCanonicalNaN happy_var_3
+	) `HappyStk` happyRest}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_379 = happyReduce 4# 101# happyReduction_379
+happyReduction_379 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut106 happy_x_3 of { happy_var_3 -> 
+	happyIn107
+		 (AssertReturnArithmeticNaN happy_var_3
+	) `HappyStk` happyRest}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_380 = happyReduce 5# 101# happyReduction_380
+happyReduction_380 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut108 happy_x_3 of { happy_var_3 -> 
+	case happyOut6 happy_x_4 of { happy_var_4 -> 
+	happyIn107
+		 (AssertTrap happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_381 = happyReduce 5# 101# happyReduction_381
+happyReduction_381 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut105 happy_x_3 of { happy_var_3 -> 
+	case happyOut6 happy_x_4 of { happy_var_4 -> 
+	happyIn107
+		 (AssertMalformed happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_382 = happyReduce 5# 101# happyReduction_382
+happyReduction_382 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut105 happy_x_3 of { happy_var_3 -> 
+	case happyOut6 happy_x_4 of { happy_var_4 -> 
+	happyIn107
+		 (AssertInvalid happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_383 = happyReduce 5# 101# happyReduction_383
+happyReduction_383 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut105 happy_x_3 of { happy_var_3 -> 
+	case happyOut6 happy_x_4 of { happy_var_4 -> 
+	happyIn107
+		 (AssertUnlinkable happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_384 = happyReduce 5# 101# happyReduction_384
+happyReduction_384 (happy_x_5 `HappyStk`
+	happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut106 happy_x_3 of { happy_var_3 -> 
+	case happyOut6 happy_x_4 of { happy_var_4 -> 
+	happyIn107
+		 (AssertExhaustion happy_var_3 happy_var_4
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_385 = happySpecReduce_1  102# happyReduction_385
+happyReduction_385 happy_x_1
+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> 
+	happyIn108
+		 (Left happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_386 = happySpecReduce_1  102# happyReduction_386
+happyReduction_386 happy_x_1
+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> 
+	happyIn108
+		 (Right happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_387 = happyReduce 4# 103# happyReduction_387
+happyReduction_387 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut102 happy_x_3 of { happy_var_3 -> 
+	happyIn109
+		 (Script happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_388 = happyReduce 4# 103# happyReduction_388
+happyReduction_388 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut6 happy_x_3 of { happy_var_3 -> 
+	happyIn109
+		 (Input happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_389 = happyReduce 4# 103# happyReduction_389
+happyReduction_389 (happy_x_4 `HappyStk`
+	happy_x_3 `HappyStk`
+	happy_x_2 `HappyStk`
+	happy_x_1 `HappyStk`
+	happyRest)
+	 = case happyOut119 happy_x_2 of { happy_var_2 -> 
+	case happyOut6 happy_x_3 of { happy_var_3 -> 
+	happyIn109
+		 (Output happy_var_2 happy_var_3
+	) `HappyStk` happyRest}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_390 = happySpecReduce_1  104# happyReduction_390
+happyReduction_390 happy_x_1
+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> 
+	happyIn110
+		 (reverse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_391 = happySpecReduce_1  105# happyReduction_391
+happyReduction_391 happy_x_1
+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> 
+	happyIn111
+		 (reverse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_392 = happySpecReduce_1  106# happyReduction_392
+happyReduction_392 happy_x_1
+	 =  case happyOut126 happy_x_1 of { happy_var_1 -> 
+	happyIn112
+		 (reverse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_393 = happySpecReduce_1  107# happyReduction_393
+happyReduction_393 happy_x_1
+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> 
+	happyIn113
+		 (reverse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_394 = happySpecReduce_1  108# happyReduction_394
+happyReduction_394 happy_x_1
+	 =  case happyOut128 happy_x_1 of { happy_var_1 -> 
+	happyIn114
+		 (reverse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_395 = happySpecReduce_1  109# happyReduction_395
+happyReduction_395 happy_x_1
+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> 
+	happyIn115
+		 (reverse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_396 = happySpecReduce_1  110# happyReduction_396
+happyReduction_396 happy_x_1
+	 =  case happyOut130 happy_x_1 of { happy_var_1 -> 
+	happyIn116
+		 (reverse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_397 = happySpecReduce_1  111# happyReduction_397
+happyReduction_397 happy_x_1
+	 =  case happyOut131 happy_x_1 of { happy_var_1 -> 
+	happyIn117
+		 (reverse happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_398 = happySpecReduce_1  112# happyReduction_398
+happyReduction_398 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Lexeme _ (TKeyword (asAlign -> Just happy_var_1))) -> 
+	happyIn118
+		 (Just happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_399 = happySpecReduce_0  112# happyReduction_399
+happyReduction_399  =  happyIn118
+		 (Nothing
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_400 = happySpecReduce_1  113# happyReduction_400
+happyReduction_400 happy_x_1
+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> 
+	happyIn119
+		 (Just happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_401 = happySpecReduce_0  113# happyReduction_401
+happyReduction_401  =  happyIn119
+		 (Nothing
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_402 = happySpecReduce_1  114# happyReduction_402
+happyReduction_402 happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	happyIn120
+		 (Just happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_403 = happySpecReduce_0  114# happyReduction_403
+happyReduction_403  =  happyIn120
+		 (Nothing
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_404 = happySpecReduce_1  115# happyReduction_404
+happyReduction_404 happy_x_1
+	 =  case happyOutTok happy_x_1 of { (Lexeme _ (TKeyword (asOffset -> Just happy_var_1))) -> 
+	happyIn121
+		 (Just happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_405 = happySpecReduce_0  115# happyReduction_405
+happyReduction_405  =  happyIn121
+		 (Nothing
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_406 = happySpecReduce_1  116# happyReduction_406
+happyReduction_406 happy_x_1
+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> 
+	happyIn122
+		 (Just happy_var_1
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_407 = happySpecReduce_0  116# happyReduction_407
+happyReduction_407  =  happyIn122
+		 (Nothing
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_408 = happySpecReduce_2  117# happyReduction_408
+happyReduction_408 happy_x_2
+	happy_x_1
+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn123
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_409 = happySpecReduce_1  117# happyReduction_409
+happyReduction_409 happy_x_1
+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> 
+	happyIn123
+		 ([happy_var_1]
+	)}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_410 = happySpecReduce_2  118# happyReduction_410
+happyReduction_410 happy_x_2
+	happy_x_1
+	 =  case happyOut124 happy_x_1 of { happy_var_1 -> 
+	case happyOut103 happy_x_2 of { happy_var_2 -> 
+	happyIn124
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_411 = happySpecReduce_0  118# happyReduction_411
+happyReduction_411  =  happyIn124
+		 ([]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_412 = happySpecReduce_2  119# happyReduction_412
+happyReduction_412 happy_x_2
+	happy_x_1
+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> 
+	case happyOut47 happy_x_2 of { happy_var_2 -> 
+	happyIn125
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_413 = happySpecReduce_0  119# happyReduction_413
+happyReduction_413  =  happyIn125
+		 ([]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_414 = happySpecReduce_2  120# happyReduction_414
+happyReduction_414 happy_x_2
+	happy_x_1
+	 =  case happyOut126 happy_x_1 of { happy_var_1 -> 
+	case happyOut10 happy_x_2 of { happy_var_2 -> 
+	happyIn126
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_415 = happySpecReduce_0  120# happyReduction_415
+happyReduction_415  =  happyIn126
+		 ([]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_416 = happySpecReduce_2  121# happyReduction_416
+happyReduction_416 happy_x_2
+	happy_x_1
+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> 
+	case happyOut32 happy_x_2 of { happy_var_2 -> 
+	happyIn127
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_417 = happySpecReduce_0  121# happyReduction_417
+happyReduction_417  =  happyIn127
+		 ([]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_418 = happySpecReduce_2  122# happyReduction_418
+happyReduction_418 happy_x_2
+	happy_x_1
+	 =  case happyOut128 happy_x_1 of { happy_var_1 -> 
+	case happyOut99 happy_x_2 of { happy_var_2 -> 
+	happyIn128
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_419 = happySpecReduce_0  122# happyReduction_419
+happyReduction_419  =  happyIn128
+		 ([]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_420 = happySpecReduce_2  123# happyReduction_420
+happyReduction_420 happy_x_2
+	happy_x_1
+	 =  case happyOut129 happy_x_1 of { happy_var_1 -> 
+	case happyOutTok happy_x_2 of { (Lexeme _ (TStringLit happy_var_2)) -> 
+	happyIn129
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_421 = happySpecReduce_0  123# happyReduction_421
+happyReduction_421  =  happyIn129
+		 ([]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_422 = happySpecReduce_2  124# happyReduction_422
+happyReduction_422 happy_x_2
+	happy_x_1
+	 =  case happyOut130 happy_x_1 of { happy_var_1 -> 
+	case happyOut6 happy_x_2 of { happy_var_2 -> 
+	happyIn130
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_423 = happySpecReduce_0  124# happyReduction_423
+happyReduction_423  =  happyIn130
+		 ([]
+	)
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_424 = happySpecReduce_2  125# happyReduction_424
+happyReduction_424 happy_x_2
+	happy_x_1
+	 =  case happyOut131 happy_x_1 of { happy_var_1 -> 
+	case happyOut9 happy_x_2 of { happy_var_2 -> 
+	happyIn131
+		 (happy_var_2 : happy_var_1
+	)}}
+
+#if __GLASGOW_HASKELL__ >= 710
+#endif
+happyReduce_425 = happySpecReduce_0  125# happyReduction_425
+happyReduction_425  =  happyIn131
+		 ([]
+	)
+
+happyNewToken action sts stk [] =
+	happyDoAction 222# notHappyAtAll action sts stk []
+
+happyNewToken action sts stk (tk:tks) =
+	let cont i = happyDoAction i tk action sts stk tks in
+	case tk of {
+	Lexeme _ TOpenBracket -> cont 1#;
+	Lexeme _ TCloseBracket -> cont 2#;
+	Lexeme _ (TKeyword "func") -> cont 3#;
+	Lexeme _ (TKeyword "param") -> cont 4#;
+	Lexeme _ (TKeyword "result") -> cont 5#;
+	Lexeme _ (TKeyword "i32") -> cont 6#;
+	Lexeme _ (TKeyword "i64") -> cont 7#;
+	Lexeme _ (TKeyword "f32") -> cont 8#;
+	Lexeme _ (TKeyword "f64") -> cont 9#;
+	Lexeme _ (TKeyword "mut") -> cont 10#;
+	Lexeme _ (TKeyword "anyfunc") -> cont 11#;
+	Lexeme _ (TKeyword "type") -> cont 12#;
+	Lexeme _ (TKeyword "unreachable") -> cont 13#;
+	Lexeme _ (TKeyword "nop") -> cont 14#;
+	Lexeme _ (TKeyword "br") -> cont 15#;
+	Lexeme _ (TKeyword "br_if") -> cont 16#;
+	Lexeme _ (TKeyword "br_table") -> cont 17#;
+	Lexeme _ (TKeyword "return") -> cont 18#;
+	Lexeme _ (TKeyword "call") -> cont 19#;
+	Lexeme _ (TKeyword "call_indirect") -> cont 20#;
+	Lexeme _ (TKeyword "drop") -> cont 21#;
+	Lexeme _ (TKeyword "select") -> cont 22#;
+	Lexeme _ (TKeyword "get_local") -> cont 23#;
+	Lexeme _ (TKeyword "set_local") -> cont 24#;
+	Lexeme _ (TKeyword "tee_local") -> cont 25#;
+	Lexeme _ (TKeyword "get_global") -> cont 26#;
+	Lexeme _ (TKeyword "set_global") -> cont 27#;
+	Lexeme _ (TKeyword "i32.load") -> cont 28#;
+	Lexeme _ (TKeyword "i64.load") -> cont 29#;
+	Lexeme _ (TKeyword "f32.load") -> cont 30#;
+	Lexeme _ (TKeyword "f64.load") -> cont 31#;
+	Lexeme _ (TKeyword "i32.load8_s") -> cont 32#;
+	Lexeme _ (TKeyword "i32.load8_u") -> cont 33#;
+	Lexeme _ (TKeyword "i32.load16_s") -> cont 34#;
+	Lexeme _ (TKeyword "i32.load16_u") -> cont 35#;
+	Lexeme _ (TKeyword "i64.load8_s") -> cont 36#;
+	Lexeme _ (TKeyword "i64.load8_u") -> cont 37#;
+	Lexeme _ (TKeyword "i64.load16_s") -> cont 38#;
+	Lexeme _ (TKeyword "i64.load16_u") -> cont 39#;
+	Lexeme _ (TKeyword "i64.load32_s") -> cont 40#;
+	Lexeme _ (TKeyword "i64.load32_u") -> cont 41#;
+	Lexeme _ (TKeyword "i32.store") -> cont 42#;
+	Lexeme _ (TKeyword "i64.store") -> cont 43#;
+	Lexeme _ (TKeyword "f32.store") -> cont 44#;
+	Lexeme _ (TKeyword "f64.store") -> cont 45#;
+	Lexeme _ (TKeyword "i32.store8") -> cont 46#;
+	Lexeme _ (TKeyword "i32.store16") -> cont 47#;
+	Lexeme _ (TKeyword "i64.store8") -> cont 48#;
+	Lexeme _ (TKeyword "i64.store16") -> cont 49#;
+	Lexeme _ (TKeyword "i64.store32") -> cont 50#;
+	Lexeme _ (TKeyword "current_memory") -> cont 51#;
+	Lexeme _ (TKeyword "grow_memory") -> cont 52#;
+	Lexeme _ (TKeyword "memory.size") -> cont 53#;
+	Lexeme _ (TKeyword "memory.grow") -> cont 54#;
+	Lexeme _ (TKeyword "i32.const") -> cont 55#;
+	Lexeme _ (TKeyword "i64.const") -> cont 56#;
+	Lexeme _ (TKeyword "f32.const") -> cont 57#;
+	Lexeme _ (TKeyword "f64.const") -> cont 58#;
+	Lexeme _ (TKeyword "i32.clz") -> cont 59#;
+	Lexeme _ (TKeyword "i32.ctz") -> cont 60#;
+	Lexeme _ (TKeyword "i32.popcnt") -> cont 61#;
+	Lexeme _ (TKeyword "i32.add") -> cont 62#;
+	Lexeme _ (TKeyword "i32.sub") -> cont 63#;
+	Lexeme _ (TKeyword "i32.mul") -> cont 64#;
+	Lexeme _ (TKeyword "i32.div_s") -> cont 65#;
+	Lexeme _ (TKeyword "i32.div_u") -> cont 66#;
+	Lexeme _ (TKeyword "i32.rem_s") -> cont 67#;
+	Lexeme _ (TKeyword "i32.rem_u") -> cont 68#;
+	Lexeme _ (TKeyword "i32.and") -> cont 69#;
+	Lexeme _ (TKeyword "i32.or") -> cont 70#;
+	Lexeme _ (TKeyword "i32.xor") -> cont 71#;
+	Lexeme _ (TKeyword "i32.shl") -> cont 72#;
+	Lexeme _ (TKeyword "i32.shr_s") -> cont 73#;
+	Lexeme _ (TKeyword "i32.shr_u") -> cont 74#;
+	Lexeme _ (TKeyword "i32.rotl") -> cont 75#;
+	Lexeme _ (TKeyword "i32.rotr") -> cont 76#;
+	Lexeme _ (TKeyword "i64.clz") -> cont 77#;
+	Lexeme _ (TKeyword "i64.ctz") -> cont 78#;
+	Lexeme _ (TKeyword "i64.popcnt") -> cont 79#;
+	Lexeme _ (TKeyword "i64.add") -> cont 80#;
+	Lexeme _ (TKeyword "i64.sub") -> cont 81#;
+	Lexeme _ (TKeyword "i64.mul") -> cont 82#;
+	Lexeme _ (TKeyword "i64.div_s") -> cont 83#;
+	Lexeme _ (TKeyword "i64.div_u") -> cont 84#;
+	Lexeme _ (TKeyword "i64.rem_s") -> cont 85#;
+	Lexeme _ (TKeyword "i64.rem_u") -> cont 86#;
+	Lexeme _ (TKeyword "i64.and") -> cont 87#;
+	Lexeme _ (TKeyword "i64.or") -> cont 88#;
+	Lexeme _ (TKeyword "i64.xor") -> cont 89#;
+	Lexeme _ (TKeyword "i64.shl") -> cont 90#;
+	Lexeme _ (TKeyword "i64.shr_s") -> cont 91#;
+	Lexeme _ (TKeyword "i64.shr_u") -> cont 92#;
+	Lexeme _ (TKeyword "i64.rotl") -> cont 93#;
+	Lexeme _ (TKeyword "i64.rotr") -> cont 94#;
+	Lexeme _ (TKeyword "f32.abs") -> cont 95#;
+	Lexeme _ (TKeyword "f32.neg") -> cont 96#;
+	Lexeme _ (TKeyword "f32.ceil") -> cont 97#;
+	Lexeme _ (TKeyword "f32.floor") -> cont 98#;
+	Lexeme _ (TKeyword "f32.trunc") -> cont 99#;
+	Lexeme _ (TKeyword "f32.nearest") -> cont 100#;
+	Lexeme _ (TKeyword "f32.sqrt") -> cont 101#;
+	Lexeme _ (TKeyword "f32.add") -> cont 102#;
+	Lexeme _ (TKeyword "f32.sub") -> cont 103#;
+	Lexeme _ (TKeyword "f32.mul") -> cont 104#;
+	Lexeme _ (TKeyword "f32.div") -> cont 105#;
+	Lexeme _ (TKeyword "f32.min") -> cont 106#;
+	Lexeme _ (TKeyword "f32.max") -> cont 107#;
+	Lexeme _ (TKeyword "f32.copysign") -> cont 108#;
+	Lexeme _ (TKeyword "f64.abs") -> cont 109#;
+	Lexeme _ (TKeyword "f64.neg") -> cont 110#;
+	Lexeme _ (TKeyword "f64.ceil") -> cont 111#;
+	Lexeme _ (TKeyword "f64.floor") -> cont 112#;
+	Lexeme _ (TKeyword "f64.trunc") -> cont 113#;
+	Lexeme _ (TKeyword "f64.nearest") -> cont 114#;
+	Lexeme _ (TKeyword "f64.sqrt") -> cont 115#;
+	Lexeme _ (TKeyword "f64.add") -> cont 116#;
+	Lexeme _ (TKeyword "f64.sub") -> cont 117#;
+	Lexeme _ (TKeyword "f64.mul") -> cont 118#;
+	Lexeme _ (TKeyword "f64.div") -> cont 119#;
+	Lexeme _ (TKeyword "f64.min") -> cont 120#;
+	Lexeme _ (TKeyword "f64.max") -> cont 121#;
+	Lexeme _ (TKeyword "f64.copysign") -> cont 122#;
+	Lexeme _ (TKeyword "i32.eqz") -> cont 123#;
+	Lexeme _ (TKeyword "i32.eq") -> cont 124#;
+	Lexeme _ (TKeyword "i32.ne") -> cont 125#;
+	Lexeme _ (TKeyword "i32.lt_s") -> cont 126#;
+	Lexeme _ (TKeyword "i32.lt_u") -> cont 127#;
+	Lexeme _ (TKeyword "i32.gt_s") -> cont 128#;
+	Lexeme _ (TKeyword "i32.gt_u") -> cont 129#;
+	Lexeme _ (TKeyword "i32.le_s") -> cont 130#;
+	Lexeme _ (TKeyword "i32.le_u") -> cont 131#;
+	Lexeme _ (TKeyword "i32.ge_s") -> cont 132#;
+	Lexeme _ (TKeyword "i32.ge_u") -> cont 133#;
+	Lexeme _ (TKeyword "i64.eqz") -> cont 134#;
+	Lexeme _ (TKeyword "i64.eq") -> cont 135#;
+	Lexeme _ (TKeyword "i64.ne") -> cont 136#;
+	Lexeme _ (TKeyword "i64.lt_s") -> cont 137#;
+	Lexeme _ (TKeyword "i64.lt_u") -> cont 138#;
+	Lexeme _ (TKeyword "i64.gt_s") -> cont 139#;
+	Lexeme _ (TKeyword "i64.gt_u") -> cont 140#;
+	Lexeme _ (TKeyword "i64.le_s") -> cont 141#;
+	Lexeme _ (TKeyword "i64.le_u") -> cont 142#;
+	Lexeme _ (TKeyword "i64.ge_s") -> cont 143#;
+	Lexeme _ (TKeyword "i64.ge_u") -> cont 144#;
+	Lexeme _ (TKeyword "f32.eq") -> cont 145#;
+	Lexeme _ (TKeyword "f32.ne") -> cont 146#;
+	Lexeme _ (TKeyword "f32.lt") -> cont 147#;
+	Lexeme _ (TKeyword "f32.gt") -> cont 148#;
+	Lexeme _ (TKeyword "f32.le") -> cont 149#;
+	Lexeme _ (TKeyword "f32.ge") -> cont 150#;
+	Lexeme _ (TKeyword "f64.eq") -> cont 151#;
+	Lexeme _ (TKeyword "f64.ne") -> cont 152#;
+	Lexeme _ (TKeyword "f64.lt") -> cont 153#;
+	Lexeme _ (TKeyword "f64.gt") -> cont 154#;
+	Lexeme _ (TKeyword "f64.le") -> cont 155#;
+	Lexeme _ (TKeyword "f64.ge") -> cont 156#;
+	Lexeme _ (TKeyword "i32.wrap/i64") -> cont 157#;
+	Lexeme _ (TKeyword "i32.trunc_s/f32") -> cont 158#;
+	Lexeme _ (TKeyword "i32.trunc_u/f32") -> cont 159#;
+	Lexeme _ (TKeyword "i32.trunc_s/f64") -> cont 160#;
+	Lexeme _ (TKeyword "i32.trunc_u/f64") -> cont 161#;
+	Lexeme _ (TKeyword "i64.extend_s/i32") -> cont 162#;
+	Lexeme _ (TKeyword "i64.extend_u/i32") -> cont 163#;
+	Lexeme _ (TKeyword "i64.trunc_s/f32") -> cont 164#;
+	Lexeme _ (TKeyword "i64.trunc_u/f32") -> cont 165#;
+	Lexeme _ (TKeyword "i64.trunc_s/f64") -> cont 166#;
+	Lexeme _ (TKeyword "i64.trunc_u/f64") -> cont 167#;
+	Lexeme _ (TKeyword "f32.convert_s/i32") -> cont 168#;
+	Lexeme _ (TKeyword "f32.convert_u/i32") -> cont 169#;
+	Lexeme _ (TKeyword "f32.convert_s/i64") -> cont 170#;
+	Lexeme _ (TKeyword "f32.convert_u/i64") -> cont 171#;
+	Lexeme _ (TKeyword "f32.demote/f64") -> cont 172#;
+	Lexeme _ (TKeyword "f64.convert_s/i32") -> cont 173#;
+	Lexeme _ (TKeyword "f64.convert_u/i32") -> cont 174#;
+	Lexeme _ (TKeyword "f64.convert_s/i64") -> cont 175#;
+	Lexeme _ (TKeyword "f64.convert_u/i64") -> cont 176#;
+	Lexeme _ (TKeyword "f64.promote/f32") -> cont 177#;
+	Lexeme _ (TKeyword "i32.reinterpret/f32") -> cont 178#;
+	Lexeme _ (TKeyword "i64.reinterpret/f64") -> cont 179#;
+	Lexeme _ (TKeyword "f32.reinterpret/i32") -> cont 180#;
+	Lexeme _ (TKeyword "f64.reinterpret/i64") -> cont 181#;
+	Lexeme _ (TKeyword "block") -> cont 182#;
+	Lexeme _ (TKeyword "loop") -> cont 183#;
+	Lexeme _ (TKeyword "if") -> cont 184#;
+	Lexeme _ (TKeyword "else") -> cont 185#;
+	Lexeme _ (TKeyword "end") -> cont 186#;
+	Lexeme _ (TKeyword "then") -> cont 187#;
+	Lexeme _ (TKeyword "table") -> cont 188#;
+	Lexeme _ (TKeyword "memory") -> cont 189#;
+	Lexeme _ (TKeyword "global") -> cont 190#;
+	Lexeme _ (TKeyword "import") -> cont 191#;
+	Lexeme _ (TKeyword "export") -> cont 192#;
+	Lexeme _ (TKeyword "local") -> cont 193#;
+	Lexeme _ (TKeyword "elem") -> cont 194#;
+	Lexeme _ (TKeyword "data") -> cont 195#;
+	Lexeme _ (TKeyword "offset") -> cont 196#;
+	Lexeme _ (TKeyword "start") -> cont 197#;
+	Lexeme _ (TKeyword "module") -> cont 198#;
+	Lexeme _ (TKeyword "binary") -> cont 199#;
+	Lexeme _ (TKeyword "quote") -> cont 200#;
+	Lexeme _ (TKeyword "register") -> cont 201#;
+	Lexeme _ (TKeyword "invoke") -> cont 202#;
+	Lexeme _ (TKeyword "get") -> cont 203#;
+	Lexeme _ (TKeyword "assert_return") -> cont 204#;
+	Lexeme _ (TKeyword "assert_return_canonical_nan") -> cont 205#;
+	Lexeme _ (TKeyword "assert_return_arithmetic_nan") -> cont 206#;
+	Lexeme _ (TKeyword "assert_trap") -> cont 207#;
+	Lexeme _ (TKeyword "assert_malformed") -> cont 208#;
+	Lexeme _ (TKeyword "assert_invalid") -> cont 209#;
+	Lexeme _ (TKeyword "assert_unlinkable") -> cont 210#;
+	Lexeme _ (TKeyword "assert_exhaustion") -> cont 211#;
+	Lexeme _ (TKeyword "script") -> cont 212#;
+	Lexeme _ (TKeyword "input") -> cont 213#;
+	Lexeme _ (TKeyword "output") -> cont 214#;
+	Lexeme _ (TId happy_dollar_dollar) -> cont 215#;
+	Lexeme _ (TIntLit happy_dollar_dollar) -> cont 216#;
+	Lexeme _ (TFloatLit happy_dollar_dollar) -> cont 217#;
+	Lexeme _ (TKeyword (asOffset -> Just happy_dollar_dollar)) -> cont 218#;
+	Lexeme _ (TKeyword (asAlign -> Just happy_dollar_dollar)) -> cont 219#;
+	Lexeme _ (TStringLit happy_dollar_dollar) -> cont 220#;
+	Lexeme _ EOF -> cont 221#;
+	_ -> happyError' ((tk:tks), [])
+	}
+
+happyError_ explist 222# tk tks = happyError' (tks, explist)
+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)
+
+happyThen :: () => Either String a -> (a -> Either String b) -> Either String b
+happyThen = (>>=)
+happyReturn :: () => a -> Either String a
+happyReturn = (return)
+happyThen1 m k tks = (>>=) m (\a -> k a tks)
+happyReturn1 :: () => a -> b -> Either String a
+happyReturn1 = \a tks -> (return) a
+happyError' :: () => ([(Lexeme)], [String]) -> Either String a
+happyError' = (\(tokens, _) -> happyError tokens)
+parseModule tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut101 x))
+
+parseModuleFields tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut100 x))
+
+parseScript tks = happySomeParser where
+ happySomeParser = happyThen (happyParse 2# tks) (\x -> happyReturn (happyOut102 x))
+
+happySeq = happyDontSeq
+
+
+-- partial function by intention
+prependFuncParams :: [ParamType] -> Function -> Function
+prependFuncParams prep f@(Function { funcType = AnonimousTypeUse ft }) =
+    f { funcType = AnonimousTypeUse $ ft { params = prep ++ params ft } }
+
+prependFuncResults :: [ValueType] -> Function -> Function
+prependFuncResults prep f@(Function { funcType = AnonimousTypeUse ft }) =
+    f { funcType = AnonimousTypeUse $ ft { results = prep ++ results ft } }
+
+mergeFuncType :: FuncType -> FuncType -> FuncType
+mergeFuncType (FuncType lps lrs) (FuncType rps rrs) = FuncType (lps ++ rps) (lrs ++ rrs)
+
+matchIdents :: Maybe Ident -> Maybe Ident -> Bool
+matchIdents Nothing _ = True
+matchIdents _ Nothing = True
+matchIdents a b = a == b
+
+asOffset :: LBS.ByteString -> Maybe Natural
+asOffset str = do
+    num <- TL.stripPrefix "offset=" $ TLEncoding.decodeUtf8 str
+    fromIntegral . fst <$> eitherToMaybe (TLRead.decimal num)
+
+asAlign :: LBS.ByteString -> Maybe Natural
+asAlign str = do
+    num <- TL.stripPrefix "align=" $ TLEncoding.decodeUtf8 str
+    fromIntegral . fst <$> eitherToMaybe (TLRead.decimal num)
+
+parseMemArg :: Natural -> Maybe Natural -> Maybe Natural -> Either String MemArg
+parseMemArg defAlign optOffset optAlign = do
+    let offset = fromMaybe 0 optOffset
+    let parsedAlign = fromIntegral $ fromMaybe defAlign optAlign
+    if parsedAlign == 0 then Left "alignment" else return ()
+    let align = fromIntegral $ round $ logBase 2 parsedAlign
+    if 2 ^ align /= parsedAlign then Left "alignment" else return ()
+    if offset >= 2 ^ 32 || align >= 2 ^ 32
+    then Left "u32 is out of boundaries"
+    else return $ MemArg offset align
+
+eitherToMaybe :: Either left right -> Maybe right
+eitherToMaybe = either (const Nothing) Just
+
+integerToWord32 :: Integer -> Word32
+integerToWord32 i
+    | i >= 0 && i <= 2 ^ 32 = fromIntegral i
+    | i < 0 && i >= -(2 ^ 31) = 0xFFFFFFFF - (fromIntegral (abs i)) + 1
+    | otherwise = error "I32 is out of bounds."
+
+integerToWord64 :: Integer -> Word64
+integerToWord64 i
+    | i >= 0 && i <= 2 ^ 64 = fromIntegral i
+    | i < 0 && i >= -(2 ^ 63) = 0xFFFFFFFFFFFFFFFF - (fromIntegral (abs i)) + 1
+    | otherwise = error "I64 is out of bounds."
+
+data FuncType = FuncType { params :: [ParamType], results :: [ValueType] } deriving (Show, Eq, Generic, NFData)
+
+emptyFuncType :: FuncType
+emptyFuncType = FuncType [] []
+
+data ParamType = ParamType {
+        ident :: Maybe Ident,
+        paramType :: ValueType
+    } deriving (Show, Eq, Generic, NFData)
+
+newtype Ident = Ident TL.Text deriving (Show, Eq, Generic, NFData)
+
+data Index = Named Ident | Index Natural deriving (Show, Eq, Generic, NFData)
+
+type LabelIndex = Index
+type FuncIndex = Index
+type TypeIndex = Index
+type LocalIndex = Index
+type GlobalIndex = Index
+type TableIndex = Index
+type MemoryIndex = Index
+
+data PlainInstr =
+    -- Control instructions
+    Unreachable
+    | Nop
+    | Br LabelIndex
+    | BrIf LabelIndex
+    | BrTable [LabelIndex] LabelIndex
+    | Return
+    | Call FuncIndex
+    | CallIndirect TypeUse
+    -- Parametric instructions
+    | Drop
+    | Select
+    -- Variable instructions
+    | GetLocal LocalIndex
+    | SetLocal LocalIndex
+    | TeeLocal LocalIndex
+    | GetGlobal GlobalIndex
+    | SetGlobal GlobalIndex
+    -- Memory instructions
+    | I32Load MemArg
+    | I64Load MemArg
+    | F32Load MemArg
+    | F64Load MemArg
+    | I32Load8S MemArg
+    | I32Load8U MemArg
+    | I32Load16S MemArg
+    | I32Load16U MemArg
+    | I64Load8S MemArg
+    | I64Load8U MemArg
+    | I64Load16S MemArg
+    | I64Load16U MemArg
+    | I64Load32S MemArg
+    | I64Load32U MemArg
+    | I32Store MemArg
+    | I64Store MemArg
+    | F32Store MemArg
+    | F64Store MemArg
+    | I32Store8 MemArg
+    | I32Store16 MemArg
+    | I64Store8 MemArg
+    | I64Store16 MemArg
+    | I64Store32 MemArg
+    | CurrentMemory
+    | GrowMemory
+    -- Numeric instructions
+    | I32Const Integer
+    | I64Const Integer
+    | F32Const Float
+    | F64Const Double
+    | IUnOp BitSize IUnOp
+    | IBinOp BitSize IBinOp
+    | I32Eqz
+    | I64Eqz
+    | IRelOp BitSize IRelOp
+    | FUnOp BitSize FUnOp
+    | FBinOp BitSize FBinOp
+    | FRelOp BitSize FRelOp
+    | I32WrapI64
+    | ITruncFU {- Int Size -} BitSize {- Float Size -} BitSize
+    | ITruncFS {- Int Size -} BitSize {- Float Size -} BitSize
+    | I64ExtendSI32
+    | I64ExtendUI32
+    | FConvertIU {- Float Size -} BitSize {- Int Size -} BitSize
+    | FConvertIS {- Float Size -} BitSize {- Int Size -} BitSize
+    | F32DemoteF64
+    | F64PromoteF32
+    | IReinterpretF BitSize
+    | FReinterpretI BitSize
+    deriving (Show, Eq, Generic, NFData)
+
+data TypeDef = TypeDef (Maybe Ident) FuncType deriving (Show, Eq, Generic, NFData)
+
+data TypeUse =
+    IndexedTypeUse TypeIndex (Maybe FuncType)
+    | AnonimousTypeUse FuncType
+    deriving (Show, Eq, Generic, NFData)
+
+data Instruction =
+    PlainInstr PlainInstr
+    | BlockInstr {
+        label :: Maybe Ident,
+        resultType :: [ValueType],
+        body :: [Instruction]
+    }
+    | LoopInstr {
+        label :: Maybe Ident,
+        resultType :: [ValueType],
+        body :: [Instruction]
+    }
+    | IfInstr {
+        label :: Maybe Ident,
+        resultType :: [ValueType],
+        trueBranch :: [Instruction],
+        falseBranch :: [Instruction]
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data Import = Import {
+        reExportAs :: [TL.Text],
+        sourceModule :: TL.Text,
+        name :: TL.Text,
+        desc :: ImportDesc
+    } deriving (Show, Eq, Generic, NFData)
+
+data ImportDesc =
+    ImportFunc (Maybe Ident) TypeUse
+    | ImportTable (Maybe Ident) TableType
+    | ImportMemory (Maybe Ident) Limit
+    | ImportGlobal (Maybe Ident) GlobalType
+    deriving (Show, Eq, Generic, NFData)
+
+data LocalType = LocalType {
+        ident :: Maybe Ident,
+        localType :: ValueType
+    } deriving (Show, Eq, Generic, NFData)
+
+data Function = Function {
+        exportFuncAs :: [TL.Text],
+        ident :: Maybe Ident,
+        funcType :: TypeUse,
+        locals :: [LocalType],
+        body :: [Instruction]
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+emptyFunction :: Function
+emptyFunction =
+    Function {
+        exportFuncAs = [],
+        ident = Nothing,
+        funcType = AnonimousTypeUse emptyFuncType,
+        locals = [],
+        body = []
+    }
+
+data Global = Global {
+        exportGlobalAs :: [TL.Text],
+        ident :: Maybe Ident,
+        globalType :: GlobalType,
+        initializer :: [Instruction]
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data Memory = Memory [TL.Text] (Maybe Ident) Limit deriving (Show, Eq, Generic, NFData)
+
+data Table = Table [TL.Text] (Maybe Ident) TableType deriving (Show, Eq, Generic, NFData)
+
+data ExportDesc =
+    ExportFunc FuncIndex
+    | ExportTable TableIndex
+    | ExportMemory MemoryIndex
+    | ExportGlobal GlobalIndex
+    deriving (Show, Eq, Generic, NFData)
+
+data Export = Export {
+        name :: TL.Text,
+        desc :: ExportDesc
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data StartFunction = StartFunction FuncIndex deriving (Show, Eq, Generic, NFData)
+
+data ElemSegment = ElemSegment {
+        tableIndex :: TableIndex,
+        offset :: [Instruction],
+        funcIndexes :: [FuncIndex]
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data DataSegment = DataSegment {
+        memIndex :: MemoryIndex,
+        offset :: [Instruction],
+        datastring :: LBS.ByteString
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data ModuleField =
+    MFType TypeDef
+    | MFImport Import
+    | MFFunc Function
+    | MFTable Table
+    | MFMem Memory
+    | MFGlobal Global
+    | MFExport Export
+    | MFStart StartFunction
+    | MFElem ElemSegment
+    | MFData DataSegment
+    deriving(Show, Eq, Generic, NFData)
+
+happyError (Lexeme _ EOF : []) = Left $ "Error occuried during parsing phase at the end of file"
+happyError (Lexeme Nothing tok : tokens) = Left $ "Error occuried during parsing phase at the end of file"
+happyError (Lexeme (Just (AlexPn abs line col)) tok : tokens) = Left $
+    "Error occuried during parsing phase. " ++
+    "Line " ++ show line ++ ", " ++
+    "Column " ++ show col ++ ", " ++
+    "Token " ++ show tok ++ ". " ++
+    "Token lookahed: " ++ show (take 3 tokens)
+
+data Module = Module {
+    types :: [TypeDef],
+    functions :: [Function],
+    tables :: [Table],
+    mems :: [Memory],
+    globals :: [Global],
+    elems :: [ElemSegment],
+    datas :: [DataSegment],
+    start :: Maybe StartFunction,
+    imports :: [Import],
+    exports :: [Export]
+} deriving (Show, Eq)
+
+type Script = [Command]
+
+data ModuleDef
+    = RawModDef (Maybe Ident) S.Module
+    | TextModDef (Maybe Ident) TL.Text
+    | BinaryModDef (Maybe Ident) LBS.ByteString
+    deriving (Show, Eq)
+
+data Command
+    = ModuleDef ModuleDef
+    | Register TL.Text (Maybe Ident)
+    | Action Action
+    | Assertion Assertion
+    | Meta Meta
+    deriving (Show, Eq)
+
+data Action
+    = Invoke (Maybe Ident) TL.Text [S.Expression]
+    | Get (Maybe Ident) TL.Text
+    deriving (Show, Eq)
+
+type FailureString = TL.Text
+
+data Assertion
+    = AssertReturn Action [S.Expression]
+    | AssertReturnCanonicalNaN Action
+    | AssertReturnArithmeticNaN Action
+    | AssertTrap (Either Action ModuleDef) FailureString
+    | AssertMalformed ModuleDef FailureString
+    | AssertInvalid ModuleDef FailureString
+    | AssertUnlinkable ModuleDef FailureString
+    | AssertExhaustion Action FailureString
+    deriving (Show, Eq)
+
+data Meta
+    = Script (Maybe Ident) Script
+    | Input (Maybe Ident) TL.Text
+    | Output (Maybe Ident) TL.Text
+    deriving (Show, Eq)
+
+type Labels = [Maybe Ident]
+
+data FunCtx = FunCtx {
+    ctxMod :: Module,
+    ctxLabels :: Labels,
+    ctxLocals :: [LocalType],
+    ctxParams :: [ParamType]
+} deriving (Eq, Show)
+
+constInstructionToValue :: Instruction -> S.Instruction Natural
+constInstructionToValue (PlainInstr (I32Const v)) = S.I32Const $ integerToWord32 v
+constInstructionToValue (PlainInstr (F32Const v)) = S.F32Const v
+constInstructionToValue (PlainInstr (I64Const v)) = S.I64Const $ integerToWord64 v
+constInstructionToValue (PlainInstr (F64Const v)) = S.F64Const v
+constInstructionToValue _ = error "Only const instructions supported as arguments for actions"
+
+desugarize :: [ModuleField] -> Either String S.Module
+desugarize fields = do
+    checkImportsOrder fields
+    let mod = Module {
+        types = reverse $ foldl' extractTypeDef (reverse $ explicitTypeDefs fields) fields,
+        functions = extract extractFunction fields,
+        tables = extract extractTable fields,
+        imports = extract extractImport fields,
+        mems = extract extractMemory fields,
+        globals = extract extractGlobal fields,
+        elems = extract extractElemSegment fields,
+        datas = extract extractDataSegment fields,
+        start = extractStart fields,
+        exports = []
+    }
+    funs <- mapM (synFunctionToStruct mod) $ functions mod
+    elements <- mapM (synElemToStruct mod) $ elems mod
+    segments <- mapM (synDataToStruct mod) $ datas mod
+    globs <- mapM (synGlobalToStruct mod) $ globals mod
+    return S.Module {
+        S.types = map synTypeDefToStruct $ types mod,
+        S.functions = funs,
+        S.tables = map synTableToStruct $ tables mod,
+        S.imports = map (synImportToStruct $ types mod) $ imports mod,
+        S.elems = elements,
+        S.datas = segments,
+        S.mems = map synMemoryToStruct $ mems mod,
+        S.globals = globs,
+        S.start = fmap (synStartToStruct mod) $ start mod,
+        S.exports = synExportsToStruct mod $ extractExports mod fields
+    }
+    where
+        -- utils
+        extract :: ([a] -> ModuleField -> [a]) -> [ModuleField] -> [a]
+        extract extractor = reverse . foldl' extractor []
+
+        findWithIndex :: (a -> Bool) -> [a] -> Maybe (a, Int)
+        findWithIndex pred l = find (pred . fst) $ zip l [0..]
+
+        -- types
+        synTypeDefToStruct :: TypeDef -> S.FuncType
+        synTypeDefToStruct (TypeDef _ FuncType { params, results }) =
+            S.FuncType (map paramType params) results
+
+        explicitTypeDefs :: [ModuleField] -> [TypeDef]
+        explicitTypeDefs = map (\(MFType def) -> def) . filter isTypeDef
+            where
+                isTypeDef (MFType _) = True
+                isTypeDef _ = False
+        
+        checkImportsOrder :: [ModuleField] -> Either String ()
+        checkImportsOrder fields = foldM checkDef False fields >> return ()
+            where
+                checkDef nonImportOccured (MFImport _) =
+                    if nonImportOccured
+                    then Left "Import sections have to be before any definition"
+                    else Right False
+                checkDef _ (MFFunc _) = return True
+                checkDef _ (MFGlobal _) = return True
+                checkDef _ (MFMem _) = return True
+                checkDef _ (MFTable _) = return True
+                checkDef nonImportOccured _ = return nonImportOccured
+
+        extractTypeDef :: [TypeDef] -> ModuleField -> [TypeDef]
+        extractTypeDef defs (MFType _) = defs -- should be extracted before implicit defs
+        extractTypeDef defs (MFImport Import { desc = ImportFunc _ typeUse }) =
+            matchTypeUse defs typeUse
+        extractTypeDef defs (MFFunc Function { funcType, body }) =
+            extractTypeDefFromInstructions (matchTypeUse defs funcType) body
+        extractTypeDef defs (MFGlobal Global { initializer }) =
+            extractTypeDefFromInstructions defs initializer
+        extractTypeDef defs (MFElem ElemSegment { offset }) =
+            extractTypeDefFromInstructions defs offset
+        extractTypeDef defs (MFData DataSegment { offset }) =
+            extractTypeDefFromInstructions defs offset
+        extractTypeDef defs _ = defs
+
+        extractTypeDefFromInstructions :: [TypeDef] -> [Instruction] -> [TypeDef]
+        extractTypeDefFromInstructions = foldl' extractTypeDefFromInstruction
+
+        extractTypeDefFromInstruction :: [TypeDef] -> Instruction -> [TypeDef]
+        extractTypeDefFromInstruction defs (PlainInstr (CallIndirect typeUse)) =
+            matchTypeUse defs typeUse
+        extractTypeDefFromInstruction defs (BlockInstr { body }) =
+            extractTypeDefFromInstructions defs body
+        extractTypeDefFromInstruction defs (LoopInstr { body }) =
+            extractTypeDefFromInstructions defs body
+        extractTypeDefFromInstruction defs (IfInstr { trueBranch, falseBranch }) =
+            extractTypeDefFromInstructions defs $ trueBranch ++ falseBranch
+        extractTypeDefFromInstruction defs _ = defs
+
+        funcTypesEq :: FuncType -> FuncType -> Bool
+        funcTypesEq l r =
+            let paramTypes = map paramType . params in
+            paramTypes l == paramTypes r && results l == results r
+
+        matchTypeFunc :: FuncType -> TypeDef -> Bool
+        matchTypeFunc funcType (TypeDef _ ft) = funcTypesEq ft funcType
+
+        matchTypeUse :: [TypeDef] -> TypeUse -> [TypeDef]
+        matchTypeUse defs (AnonimousTypeUse funcType) =
+            if any (matchTypeFunc funcType) defs
+            then defs
+            else (TypeDef Nothing funcType) : defs
+        matchTypeUse defs _ = defs
+
+        getTypeIndex :: [TypeDef] -> TypeUse -> Maybe Natural
+        getTypeIndex defs (AnonimousTypeUse funcType) =
+            fromIntegral <$> findIndex (matchTypeFunc funcType) defs
+        getTypeIndex defs (IndexedTypeUse (Named ident) (Just funcType)) = do
+            (def, idx) <- findWithIndex (\(TypeDef i _) -> i == Just ident) defs
+            guard $ matchTypeFunc funcType def
+            return $ fromIntegral idx
+        getTypeIndex defs (IndexedTypeUse (Named ident) Nothing) =
+            fromIntegral <$> findIndex (\(TypeDef i _) -> i == Just ident) defs
+        getTypeIndex defs (IndexedTypeUse (Index n) (Just funcType)) = do
+            guard $ matchTypeFunc funcType $ defs !! fromIntegral n
+            return n
+        getTypeIndex defs (IndexedTypeUse (Index n) Nothing) = return n
+        
+        -- imports
+        synImportToStruct :: [TypeDef] -> Import -> S.Import
+        synImportToStruct defs (Import _ mod name (ImportFunc _ typeUse)) =
+            case getTypeIndex defs typeUse of
+                Just idx -> S.Import mod name $ S.ImportFunc idx
+                Nothing -> error $ "cannot find type index for function import: " ++ show typeUse
+        synImportToStruct _ (Import _ mod name (ImportTable _ tableType)) =
+            S.Import mod name $ S.ImportTable tableType
+        synImportToStruct _ (Import _ mod name (ImportMemory _ limit)) =
+            S.Import mod name $ S.ImportMemory limit
+        synImportToStruct _ (Import _ mod name (ImportGlobal _ globalType)) =
+            S.Import mod name $ S.ImportGlobal globalType
+
+        extractImport :: [Import] -> ModuleField -> [Import]
+        extractImport imports (MFImport imp) = imp : imports
+        extractImport imports _ = imports
+
+        unwrapLabel ctx labelIdx =
+            case getLabelIdx ctx labelIdx of
+                Just i -> Right i
+                Nothing -> Left "unknown label"
+
+        -- functions
+        synInstrToStruct :: FunCtx -> Instruction -> Either String (S.Instruction Natural)
+        synInstrToStruct _ (PlainInstr Unreachable) = return S.Unreachable
+        synInstrToStruct _ (PlainInstr Nop) = return S.Nop
+        synInstrToStruct ctx (PlainInstr (Br labelIdx)) =
+            S.Br <$> unwrapLabel ctx labelIdx
+        synInstrToStruct ctx (PlainInstr (BrIf labelIdx)) =
+            S.BrIf <$> unwrapLabel ctx labelIdx
+        synInstrToStruct ctx (PlainInstr (BrTable lbls lbl)) = do
+            labels <- mapM (unwrapLabel ctx) lbls
+            S.BrTable labels <$> unwrapLabel ctx lbl
+        synInstrToStruct _ (PlainInstr Return) = return S.Return
+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (Call funIdx)) =
+            case getFuncIndex ctxMod funIdx of
+                Just idx -> return $ S.Call idx
+                Nothing -> Left "unknown function"
+        synInstrToStruct FunCtx { ctxMod = Module { types } } (PlainInstr (CallIndirect typeUse)) =
+            case getTypeIndex types typeUse of
+                Just idx -> return $ S.CallIndirect idx
+                Nothing -> Left "unknown type"
+        synInstrToStruct _ (PlainInstr Drop) = return $ S.Drop
+        synInstrToStruct _ (PlainInstr Select) = return $ S.Select
+        synInstrToStruct ctx (PlainInstr (GetLocal localIdx)) =
+            case getLocalIndex ctx localIdx of
+                Just idx -> return $ S.GetLocal idx
+                Nothing -> Left "unknown local"
+        synInstrToStruct ctx (PlainInstr (SetLocal localIdx)) =
+            case getLocalIndex ctx localIdx of
+                Just idx -> return $ S.SetLocal idx
+                Nothing -> Left "unknown local"
+        synInstrToStruct ctx (PlainInstr (TeeLocal localIdx)) =
+            case getLocalIndex ctx localIdx of
+                Just idx -> return $ S.TeeLocal idx
+                Nothing -> Left "unknown local"
+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (GetGlobal globalIdx)) =
+            case getGlobalIndex ctxMod globalIdx of
+                Just idx -> return $ S.GetGlobal idx
+                Nothing -> Left "unknown global"
+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (SetGlobal globalIdx)) =
+            case getGlobalIndex ctxMod globalIdx of
+                Just idx -> return $ S.SetGlobal idx
+                Nothing -> Left "unknown global"
+        synInstrToStruct _ (PlainInstr (I32Load memArg)) = return $ S.I32Load memArg
+        synInstrToStruct _ (PlainInstr (I64Load memArg)) = return $ S.I64Load memArg
+        synInstrToStruct _ (PlainInstr (F32Load memArg)) = return $ S.F32Load memArg
+        synInstrToStruct _ (PlainInstr (F64Load memArg)) = return $ S.F64Load memArg
+        synInstrToStruct _ (PlainInstr (I32Load8S memArg)) = return $ S.I32Load8S memArg
+        synInstrToStruct _ (PlainInstr (I32Load8U memArg)) = return $ S.I32Load8U memArg
+        synInstrToStruct _ (PlainInstr (I32Load16S memArg)) = return $ S.I32Load16S memArg
+        synInstrToStruct _ (PlainInstr (I32Load16U memArg)) = return $ S.I32Load16U memArg
+        synInstrToStruct _ (PlainInstr (I64Load8S memArg)) = return $ S.I64Load8S memArg
+        synInstrToStruct _ (PlainInstr (I64Load8U memArg)) = return $ S.I64Load8U memArg
+        synInstrToStruct _ (PlainInstr (I64Load16S memArg)) = return $ S.I64Load16S memArg
+        synInstrToStruct _ (PlainInstr (I64Load16U memArg)) = return $ S.I64Load16U memArg
+        synInstrToStruct _ (PlainInstr (I64Load32S memArg)) = return $ S.I64Load32S memArg
+        synInstrToStruct _ (PlainInstr (I64Load32U memArg)) = return $ S.I64Load32U memArg
+        synInstrToStruct _ (PlainInstr (I32Store memArg)) = return $ S.I32Store memArg
+        synInstrToStruct _ (PlainInstr (I64Store memArg)) = return $ S.I64Store memArg
+        synInstrToStruct _ (PlainInstr (F32Store memArg)) = return $ S.F32Store memArg
+        synInstrToStruct _ (PlainInstr (F64Store memArg)) = return $ S.F64Store memArg
+        synInstrToStruct _ (PlainInstr (I32Store8 memArg)) = return $ S.I32Store8 memArg
+        synInstrToStruct _ (PlainInstr (I32Store16 memArg)) = return $ S.I32Store16 memArg
+        synInstrToStruct _ (PlainInstr (I64Store8 memArg)) = return $ S.I64Store8 memArg
+        synInstrToStruct _ (PlainInstr (I64Store16 memArg)) = return $ S.I64Store16 memArg
+        synInstrToStruct _ (PlainInstr (I64Store32 memArg)) = return $ S.I64Store32 memArg
+        synInstrToStruct _ (PlainInstr CurrentMemory) = return $ S.CurrentMemory
+        synInstrToStruct _ (PlainInstr GrowMemory) = return $ S.GrowMemory
+        synInstrToStruct _ (PlainInstr (I32Const val)) = return $ S.I32Const $ integerToWord32 val
+        synInstrToStruct _ (PlainInstr (I64Const val)) = return $ S.I64Const $ integerToWord64 val
+        synInstrToStruct _ (PlainInstr (F32Const val)) = return $ S.F32Const val
+        synInstrToStruct _ (PlainInstr (F64Const val)) = return $ S.F64Const val
+        synInstrToStruct _ (PlainInstr (IUnOp sz op)) = return $ S.IUnOp sz op
+        synInstrToStruct _ (PlainInstr (IBinOp sz op)) = return $ S.IBinOp sz op
+        synInstrToStruct _ (PlainInstr I32Eqz) = return $ S.I32Eqz
+        synInstrToStruct _ (PlainInstr I64Eqz) = return $ S.I64Eqz
+        synInstrToStruct _ (PlainInstr (IRelOp sz op)) = return $ S.IRelOp sz op
+        synInstrToStruct _ (PlainInstr (FUnOp sz op)) = return $ S.FUnOp sz op
+        synInstrToStruct _ (PlainInstr (FBinOp sz op)) = return $ S.FBinOp sz op
+        synInstrToStruct _ (PlainInstr (FRelOp sz op)) = return $ S.FRelOp sz op
+        synInstrToStruct _ (PlainInstr I32WrapI64) = return $ S.I32WrapI64
+        synInstrToStruct _ (PlainInstr (ITruncFU sz sz')) = return $ S.ITruncFU sz sz'
+        synInstrToStruct _ (PlainInstr (ITruncFS sz sz')) = return $ S.ITruncFS sz sz'
+        synInstrToStruct _ (PlainInstr I64ExtendSI32) = return $ S.I64ExtendSI32
+        synInstrToStruct _ (PlainInstr I64ExtendUI32) = return $ S.I64ExtendUI32
+        synInstrToStruct _ (PlainInstr (FConvertIU sz sz')) = return $ S.FConvertIU sz sz'
+        synInstrToStruct _ (PlainInstr (FConvertIS sz sz')) = return $ S.FConvertIS sz sz'
+        synInstrToStruct _ (PlainInstr F32DemoteF64) = return $ S.F32DemoteF64
+        synInstrToStruct _ (PlainInstr F64PromoteF32) = return $ S.F64PromoteF32
+        synInstrToStruct _ (PlainInstr (IReinterpretF sz)) = return $ S.IReinterpretF sz
+        synInstrToStruct _ (PlainInstr (FReinterpretI sz)) = return $ S.FReinterpretI sz
+        synInstrToStruct ctx BlockInstr {label, resultType, body} =
+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx } in
+            S.Block resultType <$> mapM (synInstrToStruct ctx') body
+        synInstrToStruct ctx LoopInstr {label, resultType, body} =
+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx } in
+            S.Loop resultType <$> mapM (synInstrToStruct ctx') body
+        synInstrToStruct ctx IfInstr {label, resultType, trueBranch, falseBranch} = do
+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx }
+            trueBranch' <- mapM (synInstrToStruct ctx') trueBranch
+            falseBranch' <- mapM (synInstrToStruct ctx') falseBranch
+            return $ S.If resultType trueBranch' falseBranch'
+        
+        synFunctionToStruct :: Module -> Function -> Either String S.Function
+        synFunctionToStruct mod Function { funcType, locals, body } = do
+            typeIdx <- (
+                    case getTypeIndex (types mod) funcType of
+                        Just idx -> Right idx
+                        Nothing -> Left "Type was not found or type signature doesn't match with type"
+                )
+            -- we have to use local func params declaration,
+            -- coz it can contain own names for them
+            let
+                params = case funcType of
+                    IndexedTypeUse _ (Just FuncType { params }) -> params
+                    AnonimousTypeUse FuncType { params } -> params
+                    _ ->
+                        if fromIntegral typeIdx < length (types mod)
+                        then let TypeDef _ FuncType { params } = types mod !! fromIntegral typeIdx in params
+                        else []
+            let ctx = FunCtx mod [] locals params
+            instructions <- mapM (synInstrToStruct ctx) body
+            return S.Function {
+                S.funcType = typeIdx,
+                S.localTypes = map localType locals,
+                S.body = instructions
+            }
+
+        extractFunction :: [Function] -> ModuleField -> [Function]
+        extractFunction funcs (MFFunc fun) = fun : funcs
+        extractFunction funcs _ = funcs
+
+        getLabelIdx :: FunCtx -> LabelIndex -> Maybe Natural
+        getLabelIdx FunCtx { ctxLabels } (Named id) =
+            fromIntegral <$> findIndex (\ident -> ident == Just id) ctxLabels
+        getLabelIdx FunCtx { ctxLabels } (Index idx) =
+            Just idx
+        
+        getLocalIndex :: FunCtx -> LabelIndex -> Maybe Natural
+        getLocalIndex FunCtx {ctxParams, ctxLocals} (Named id) =
+            case findIndex (\(ParamType ident _) -> ident == Just id) ctxParams of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (LocalType ident _) = ident == Just id in
+                    fromIntegral . (+ length ctxParams) <$> findIndex isIdent ctxLocals
+        getLocalIndex FunCtx {ctxParams, ctxLocals} (Index idx) = Just idx
+        
+        isFuncImport :: Import -> Bool
+        isFuncImport Import { desc = ImportFunc _ _ } = True
+        isFuncImport _ = False
+
+        getFuncIndex :: Module -> FuncIndex -> Maybe Natural
+        getFuncIndex Module { imports, functions } (Named id) =
+            let funImports = filter isFuncImport imports in
+            case findIndex (\(Import { desc = ImportFunc ident _ }) -> ident == Just id) funImports of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (Function { ident }) = ident == Just id in
+                    fromIntegral . (+ length funImports) <$> findIndex isIdent functions
+        getFuncIndex Module { imports, functions } (Index idx) = Just idx
+
+        -- tables
+        synTableToStruct :: Table -> S.Table
+        synTableToStruct (Table _ _ tableType) = S.Table tableType
+
+        extractTable :: [Table] -> ModuleField -> [Table]
+        extractTable tables (MFTable table) = table : tables
+        extractTable tables _ = tables
+
+        isTableImport :: Import -> Bool
+        isTableImport Import { desc = ImportTable _ _ } = True
+        isTableImport _ = False
+
+        getTableIndex :: Module -> TableIndex -> Maybe Natural
+        getTableIndex Module { imports, tables } (Named id) =
+            let tableImports = filter isTableImport imports in
+            case findIndex (\(Import { desc = ImportTable ident _ }) -> ident == Just id) tableImports of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (Table _ (Just id) _) = True in
+                    fromIntegral . (+ length tableImports) <$> findIndex isIdent tables
+        getTableIndex Module { imports, tables } (Index idx) = Just idx
+
+        -- memory
+        synMemoryToStruct :: Memory -> S.Memory
+        synMemoryToStruct (Memory _ _ limits) = S.Memory limits
+
+        extractMemory :: [Memory] -> ModuleField -> [Memory]
+        extractMemory mems (MFMem mem) = mem : mems
+        extractMemory mems _ = mems
+
+        isMemImport :: Import -> Bool
+        isMemImport Import { desc = ImportMemory _ _ } = True
+        isMemImport _ = False
+
+        getMemIndex :: Module -> MemoryIndex -> Maybe Natural
+        getMemIndex Module { imports, mems } (Named id) =
+            let memImports = filter isMemImport imports in
+            case findIndex (\(Import { desc = ImportMemory ident _ }) -> ident == Just id) memImports of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (Memory _ (Just id) _) = True in
+                    fromIntegral . (+ length memImports) <$> findIndex isIdent mems
+        getMemIndex Module { imports, mems } (Index idx) = Just idx
+
+        -- global
+        synGlobalToStruct :: Module -> Global -> Either String S.Global
+        synGlobalToStruct mod Global { globalType, initializer } =
+            let ctx = FunCtx mod [] [] [] in
+            S.Global globalType <$> mapM (synInstrToStruct ctx) initializer
+
+        extractGlobal :: [Global] -> ModuleField -> [Global]
+        extractGlobal globals (MFGlobal global) = global : globals
+        extractGlobal globals _ = globals
+
+        isGlobalImport :: Import -> Bool
+        isGlobalImport Import { desc = ImportGlobal _ _ } = True
+        isGlobalImport _ = False
+
+        getGlobalIndex :: Module -> GlobalIndex -> Maybe Natural
+        getGlobalIndex Module { imports, globals } (Named id) =
+            let globalImports = filter isGlobalImport imports in
+            case findIndex (\(Import { desc = ImportGlobal ident _ }) -> ident == Just id) globalImports of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (Global { ident }) = ident == Just id in
+                    fromIntegral . (+ length globalImports) <$> findIndex isIdent globals
+        getGlobalIndex Module { imports, globals } (Index idx) = Just idx
+
+        -- elem segment
+        synElemToStruct :: Module -> ElemSegment -> Either String S.ElemSegment
+        synElemToStruct mod ElemSegment { tableIndex, offset, funcIndexes } =
+            let ctx = FunCtx mod [] [] [] in
+            let offsetInstrs = mapM (synInstrToStruct ctx) offset in
+            let idx = fromJust $ getTableIndex mod tableIndex in
+            let indexes = map (fromJust . getFuncIndex mod) funcIndexes in
+            S.ElemSegment idx <$> offsetInstrs <*> return indexes
+
+        extractElemSegment :: [ElemSegment] -> ModuleField -> [ElemSegment]
+        extractElemSegment elems (MFElem elem) = elem : elems
+        extractElemSegment elems _ = elems
+
+        -- data segment
+        synDataToStruct :: Module -> DataSegment -> Either String S.DataSegment
+        synDataToStruct mod DataSegment { memIndex, offset, datastring } =
+            let ctx = FunCtx mod [] [] [] in
+            let offsetInstrs = mapM (synInstrToStruct ctx) offset in
+            let idx = fromJust $ getMemIndex mod memIndex in
+            S.DataSegment idx <$> offsetInstrs <*> return datastring
+
+        extractDataSegment :: [DataSegment] -> ModuleField -> [DataSegment]
+        extractDataSegment datas (MFData dataSegment) = dataSegment : datas
+        extractDataSegment datas _ = datas
+
+        -- start
+        synStartToStruct :: Module -> StartFunction -> S.StartFunction
+        synStartToStruct mod (StartFunction funIdx) =
+            S.StartFunction $ fromJust $ getFuncIndex mod funIdx
+        
+        extractStart :: [ModuleField] -> Maybe StartFunction
+        extractStart = foldl' extractStart' Nothing
+
+        extractStart' :: Maybe StartFunction -> ModuleField -> Maybe StartFunction
+        extractStart' _ (MFStart start) = Just start
+        extractStart' start _ = start
+
+        -- exports
+        extractExports :: Module -> [ModuleField] -> [ModuleField]
+        extractExports mod mf =
+            let initial = (funcImportLength, globImportLength, memImportLength, tableImportLength, []) in
+            let (_, _, _, _, result) = foldl' extractExport initial mf in
+            reverse result
+            where
+                funcImportLength = fromIntegral $ length $ filter isFuncImport $ imports mod
+                globImportLength = fromIntegral $ length $ filter isGlobalImport $ imports mod
+                memImportLength = fromIntegral $ length $ filter isMemImport $ imports mod
+                tableImportLength = fromIntegral $ length $ filter isTableImport $ imports mod
+
+                extractExport (fidx, gidx, midx, tidx, mf) (MFFunc fun@Function{ exportFuncAs }) =
+                    let exports = map (\name -> MFExport $ Export name $ ExportFunc $ Index fidx) exportFuncAs in
+                    (fidx + 1, gidx, midx, tidx, [MFFunc fun] ++ exports ++ mf)
+                extractExport (fidx, gidx, midx, tidx, mf) (MFGlobal glob@Global{ exportGlobalAs }) =
+                    let exports = map (\name -> MFExport $ Export name $ ExportGlobal $ Index gidx) exportGlobalAs in
+                    (fidx, gidx + 1, midx, tidx, [MFGlobal glob] ++ exports ++ mf)
+                extractExport (fidx, gidx, midx, tidx, mf) (MFMem (Memory exps i l)) =
+                    let exports = map (\name -> MFExport $ Export name $ ExportMemory $ Index midx) exps in
+                    (fidx, gidx, midx + 1, tidx, [MFMem (Memory exps i l)] ++ exports ++ mf)
+                extractExport (fidx, gidx, midx, tidx, mf) (MFTable (Table exps i t)) =
+                    let exports = map (\name -> MFExport $ Export name $ ExportTable $ Index tidx) exps in
+                    (fidx, gidx, midx, tidx + 1, [MFTable (Table exps i t)] ++ exports ++ mf)
+                extractExport (fidx, gidx, midx, tidx, mf) f = (fidx, gidx, midx, tidx, f:mf)
+ 
+        synExportsToStruct :: Module -> [ModuleField] -> [S.Export]
+        synExportsToStruct mod (MFExport Export { name, desc = ExportFunc idx } : rest) =
+            let exp = S.Export name $ S.ExportFunc $ fromJust $ getFuncIndex mod idx in
+            exp : synExportsToStruct mod rest
+        synExportsToStruct mod (MFExport Export { name, desc = ExportTable idx } : rest) =
+            let exp = S.Export name $ S.ExportTable $ fromJust $ getTableIndex mod idx in
+            exp : synExportsToStruct mod rest
+        synExportsToStruct mod (MFExport Export { name, desc = ExportMemory idx } : rest) =
+            let exp = S.Export name $ S.ExportMemory $ fromJust $ getMemIndex mod idx in
+            exp : synExportsToStruct mod rest
+        synExportsToStruct mod (MFExport Export { name, desc = ExportGlobal idx } : rest) =
+            let exp = S.Export name $ S.ExportGlobal $ fromJust $ getGlobalIndex mod idx in
+            exp : synExportsToStruct mod rest
+        synExportsToStruct mod (_ : rest) = synExportsToStruct mod rest
+        synExportsToStruct _ [] = []
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp 
+
+
+
+
+
+
+
+
+
+
+
+
+
+-- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.
+#if __GLASGOW_HASKELL__ > 706
+#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)
+#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)
+#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)
+#else
+#define LT(n,m) (n Happy_GHC_Exts.<# m)
+#define GTE(n,m) (n Happy_GHC_Exts.>=# m)
+#define EQ(n,m) (n Happy_GHC_Exts.==# m)
+#endif
+
+
+data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+infixr 9 `HappyStk`
+data HappyStk a = HappyStk a (HappyStk a)
+
+-----------------------------------------------------------------------------
+-- starting the parse
+
+happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll
+
+-----------------------------------------------------------------------------
+-- Accepting the parse
+
+-- If the current token is 0#, it means we've just accepted a partial
+-- parse (a %partial parser).  We must ignore the saved token on the top of
+-- the stack in this case.
+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =
+        happyReturn1 ans
+happyAccept j tk st sts (HappyStk ans _) = 
+        (happyTcHack j (happyTcHack st)) (happyReturn1 ans)
+
+-----------------------------------------------------------------------------
+-- Arrays only: do the next action
+
+
+
+happyDoAction i tk st
+        = {- nothing -}
+          
+
+          case action of
+                0#           -> {- nothing -}
+                                     happyFail (happyExpListPerState ((Happy_GHC_Exts.I# (st)) :: Int)) i tk st
+                -1#          -> {- nothing -}
+                                     happyAccept i tk st
+                n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}
+                                                   
+                                                   (happyReduceArr Happy_Data_Array.! rule) i tk st
+                                                   where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))
+                n                 -> {- nothing -}
+                                     
+
+                                     happyShift new_state i tk st
+                                     where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))
+   where off    = happyAdjustOffset (indexShortOffAddr happyActOffsets st)
+         off_i  = (off Happy_GHC_Exts.+#  i)
+         check  = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))
+                  then EQ(indexShortOffAddr happyCheck off_i, i)
+                  else False
+         action
+          | check     = indexShortOffAddr happyTable off_i
+          | otherwise = indexShortOffAddr happyDefActions st
+
+
+
+
+indexShortOffAddr (HappyA# arr) off =
+        Happy_GHC_Exts.narrow16Int# i
+  where
+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)
+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))
+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))
+        off' = off Happy_GHC_Exts.*# 2#
+
+
+
+
+{-# INLINE happyLt #-}
+happyLt x y = LT(x,y)
+
+
+readArrayBit arr bit =
+    Bits.testBit (Happy_GHC_Exts.I# (indexShortOffAddr arr ((unbox_int bit) `Happy_GHC_Exts.iShiftRA#` 4#))) (bit `mod` 16)
+  where unbox_int (Happy_GHC_Exts.I# x) = x
+
+
+
+
+
+
+data HappyAddr = HappyA# Happy_GHC_Exts.Addr#
+
+
+-----------------------------------------------------------------------------
+-- HappyState data type (not arrays)
+
+
+
+-----------------------------------------------------------------------------
+-- Shifting a token
+
+happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
+--     trace "shifting the error token" $
+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)
+
+happyShift new_state i tk st sts stk =
+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)
+
+-- happyReduce is specialised for the common cases.
+
+happySpecReduce_0 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_0 nt fn j tk st@((action)) sts stk
+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)
+
+happySpecReduce_1 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')
+     = let r = fn v1 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_2 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')
+     = let r = fn v1 v2 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_3 i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
+     = let r = fn v1 v2 v3 in
+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))
+
+happyReduce k i fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyReduce k nt fn j tk st sts stk
+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of
+         sts1@((HappyCons (st1@(action)) (_))) ->
+                let r = fn stk in  -- it doesn't hurt to always seq here...
+                happyDoSeq r (happyGoto nt j tk st1 sts1 r)
+
+happyMonadReduce k nt fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyMonadReduce k nt fn j tk st sts stk =
+      case happyDrop k (HappyCons (st) (sts)) of
+        sts1@((HappyCons (st1@(action)) (_))) ->
+          let drop_stk = happyDropStk k stk in
+          happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))
+
+happyMonad2Reduce k nt fn 0# tk st sts stk
+     = happyFail [] 0# tk st sts stk
+happyMonad2Reduce k nt fn j tk st sts stk =
+      case happyDrop k (HappyCons (st) (sts)) of
+        sts1@((HappyCons (st1@(action)) (_))) ->
+         let drop_stk = happyDropStk k stk
+
+             off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st1)
+             off_i = (off Happy_GHC_Exts.+#  nt)
+             new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+          in
+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
+
+happyDrop 0# l = l
+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t
+
+happyDropStk 0# l = l
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs
+
+-----------------------------------------------------------------------------
+-- Moving to a new state after a reduction
+
+
+happyGoto nt j tk st = 
+   {- nothing -}
+   happyDoAction j tk new_state
+   where off = happyAdjustOffset (indexShortOffAddr happyGotoOffsets st)
+         off_i = (off Happy_GHC_Exts.+#  nt)
+         new_state = indexShortOffAddr happyTable off_i
+
+
+
+
+-----------------------------------------------------------------------------
+-- Error recovery (0# is the error token)
+
+-- parse error if we are in recovery and we fail again
+happyFail explist 0# tk old_st _ stk@(x `HappyStk` _) =
+     let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in
+--      trace "failing" $ 
+        happyError_ explist i tk
+
+{-  We don't need state discarding for our restricted implementation of
+    "error".  In fact, it can cause some bogus parses, so I've disabled it
+    for now --SDM
+
+-- discard a state
+happyFail  0# tk old_st (HappyCons ((action)) (sts)) 
+                                                (saved_tok `HappyStk` _ `HappyStk` stk) =
+--      trace ("discarding state, depth " ++ show (length stk))  $
+        happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))
+-}
+
+-- Enter error recovery: generate an error token,
+--                       save the old token and carry on.
+happyFail explist i tk (action) sts stk =
+--      trace "entering error recovery" $
+        happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)
+
+-- Internal happy errors:
+
+notHappyAtAll :: a
+notHappyAtAll = error "Internal Happy error\n"
+
+-----------------------------------------------------------------------------
+-- Hack to get the typechecker to accept our action functions
+
+
+happyTcHack :: Happy_GHC_Exts.Int# -> a -> a
+happyTcHack x y = y
+{-# INLINE happyTcHack #-}
+
+
+-----------------------------------------------------------------------------
+-- Seq-ing.  If the --strict flag is given, then Happy emits 
+--      happySeq = happyDoSeq
+-- otherwise it emits
+--      happySeq = happyDontSeq
+
+happyDoSeq, happyDontSeq :: a -> b -> b
+happyDoSeq   a b = a `seq` b
+happyDontSeq a b = b
+
+-----------------------------------------------------------------------------
+-- Don't inline any functions from the template.  GHC has a nasty habit
+-- of deciding to inline happyGoto everywhere, which increases the size of
+-- the generated parser quite a bit.
+
+
+{-# NOINLINE happyDoAction #-}
+{-# NOINLINE happyTable #-}
+{-# NOINLINE happyCheck #-}
+{-# NOINLINE happyActOffsets #-}
+{-# NOINLINE happyGotoOffsets #-}
+{-# NOINLINE happyDefActions #-}
+
+{-# NOINLINE happyShift #-}
+{-# NOINLINE happySpecReduce_0 #-}
+{-# NOINLINE happySpecReduce_1 #-}
+{-# NOINLINE happySpecReduce_2 #-}
+{-# NOINLINE happySpecReduce_3 #-}
+{-# NOINLINE happyReduce #-}
+{-# NOINLINE happyMonadReduce #-}
+{-# NOINLINE happyGoto #-}
+{-# NOINLINE happyFail #-}
+
+-- end of Happy Template.
+
diff --git a/exec/Main.hs b/exec/Main.hs
new file mode 100644
--- /dev/null
+++ b/exec/Main.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Main where
+
+import qualified Data.ByteString.Lazy as LBS
+import qualified Data.ByteString.Base64.Lazy as Base64
+import Data.Maybe (fromMaybe)
+
+import qualified Language.Wasm as Wasm
+
+import Options.Applicative
+import Data.Semigroup ((<>))
+
+{-
+wasm compile INPUT -o output -f js -f binary
+wasm exec --script INPUT
+wasm validate INPUT -f binary -f text
+wasm link 
+-}
+
+data CompileOutFormat = OutJS | OutBinary | OutHTML deriving (Eq)
+data ExecMod = Plain | Script deriving (Show, Eq)
+data Input = InpText | InpBinary deriving (Eq)
+
+instance Read CompileOutFormat where
+  readsPrec _ "js" = [(OutJS, "")]
+  readsPrec _ "binary" = [(OutBinary, "")]
+  readsPrec _ "html" = [(OutHTML, "")]
+  readsPrec _ _ = error "Unknown compilation output foramt"
+
+instance Show CompileOutFormat where
+  show OutJS = "js"
+  show OutBinary = "binary"
+  show OutHTML = "html"
+
+instance Read Input where
+  readsPrec _ "text" = [(InpText, "")]
+  readsPrec _ "binary" = [(InpBinary, "")]
+  readsPrec _ _ = error "Unknown validation input foramt"
+
+instance Show Input where
+  show InpText = "text"
+  show InpBinary = "binary"
+
+data WasmCommand
+  = Compile {
+    input :: String,
+    output :: String,
+    outFormat :: CompileOutFormat
+  }
+  | Exec {
+    input :: String,
+    mode :: ExecMod,
+    inpFormat :: Input
+  }
+  | Validate {
+    input :: String,
+    inpFormat :: Input
+  }
+  deriving (Show, Eq)
+
+compileArgs = Compile
+  <$> argument str (metavar "FILE")
+  <*> strOption (
+      long "out"
+      <> short 'o'
+      <> metavar "FILE"
+      <> help "Distination for compilation"
+    )
+  <*> option auto (
+      long "format"
+      <> short 'f'
+      <> help "Output file format"
+      <> showDefault
+      <> value OutBinary
+    )
+
+execArgs = Exec
+  <$> argument str (metavar "FILE")
+  <*> flag Plain Script (long "script" <> help "Execute file in script mode")
+  <*> option auto (
+    long "format"
+    <> short 'f'
+    <> help "Input file format"
+    <> showDefault
+    <> value InpText
+  )
+
+validateArgs = Validate
+  <$> argument str (metavar "FILE")
+  <*> option auto (
+      long "format"
+      <> short 'f'
+      <> help "Input file format"
+      <> showDefault
+      <> value InpText
+    )
+
+config :: Parser WasmCommand
+config = subparser (
+    command "compile" (info compileArgs (progDesc "Compile WebAssembly file from text representation"))
+    <> command "exec" (info execArgs (progDesc "Compile WebAssembly file if needed and execute"))
+    <> command "validate" (info validateArgs (progDesc "Validate WebAssembly file"))
+  )
+
+toBinary :: LBS.ByteString -> Either String LBS.ByteString
+toBinary = fmap Wasm.encodeLazy . Wasm.parse
+
+compileAs :: (LBS.ByteString -> LBS.ByteString) -> String -> String -> IO ()
+compileAs transform input output = do
+  content <- LBS.readFile input
+  case toBinary content of
+    Right binary ->
+      LBS.writeFile output $ transform binary
+    Left reason ->
+      putStrLn $ "Cannot complie module: " ++ reason
+
+binary :: LBS.ByteString -> LBS.ByteString
+binary = id
+
+js :: LBS.ByteString -> LBS.ByteString
+js binary =
+    let asBase64 = Base64.encode binary in
+    LBS.concat [
+      "const bytes = Uint8Array.from(atob('" <> asBase64 <> "'), c => c.charCodeAt(0));\n",
+      "WebAssembly.instantiate(bytes, {}).then(res => console.log(res.instance))\n"
+    ]
+
+html :: LBS.ByteString -> LBS.ByteString
+html binary =
+    LBS.concat [
+      "<script>\n",
+      js binary,
+      "</script>\n"
+    ]
+
+exec :: WasmCommand -> IO ()
+exec (Compile inp out OutBinary) = compileAs binary inp out
+exec (Compile inp out OutJS) = compileAs js inp out
+exec (Compile inp out OutHTML) = compileAs html inp out
+exec command = putStrLn $ "command is not implemented yet: " ++ show command
+
+main :: IO ()
+main = execParser opts >>= exec
+  where
+    opts = info (config <**> helper)
+      (fullDesc
+        <> progDesc "WebAssembly Toolkit"
+        <> header "This tool can compile text representation to binary format, validate module in text or binary representation and so on.")
diff --git a/src/Language/Wasm.hs b/src/Language/Wasm.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm.hs
@@ -0,0 +1,48 @@
+module Language.Wasm (
+    Module,
+    ValidModule,
+    ValidationError(..),
+    parse,
+    validate,
+    Language.Wasm.parseScript,
+    encode,
+    encodeLazy,
+    decode,
+    decodeLazy,
+    Script,
+    runScript
+) where
+
+import qualified Data.ByteString as BS
+import qualified Data.ByteString.Lazy as LBS
+
+import Language.Wasm.Structure as Struct
+import Language.Wasm.Script as Script
+import Language.Wasm.Lexer as Lexer
+import Language.Wasm.Parser as Parser
+import Language.Wasm.Validate as Valid
+import Language.Wasm.Binary as Binary
+
+-- | Parse WebAssembly text representation to `Module`
+parse :: LBS.ByteString -> Either String Module
+parse content = Lexer.scanner content >>= Parser.parseModule
+
+-- | Parse WebAssembly extended scipt grammar
+parseScript :: LBS.ByteString -> Either String Script
+parseScript content = Lexer.scanner content >>= Parser.parseScript
+
+-- | Dump `Module` to binary representation
+encode :: Module -> BS.ByteString
+encode = dumpModule
+
+-- | Dump `Module` to binary representation lazily
+encodeLazy :: Module -> LBS.ByteString
+encodeLazy = dumpModuleLazy
+
+-- | Decode `Module` from binary representation
+decode :: BS.ByteString -> Either String Module
+decode = decodeModule
+
+-- | Decode `Module` from binary representation lazily
+decodeLazy :: LBS.ByteString -> Either String Module
+decodeLazy = decodeModuleLazy
diff --git a/src/Language/Wasm/Binary.hs b/src/Language/Wasm/Binary.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/Binary.hs
@@ -0,0 +1,841 @@
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleInstances #-}
+
+module Language.Wasm.Binary (
+    dumpModule,
+    dumpModuleLazy,
+    decodeModule,
+    decodeModuleLazy
+) where
+
+import Language.Wasm.Structure
+
+import Numeric.Natural (Natural)
+import Data.Bits
+import Data.Word (Word8, Word32, Word64)
+import Data.Int (Int8, Int32, Int64)
+import Data.Serialize
+import qualified Data.ByteString as BS
+import qualified Data.ByteString.Lazy as LBS
+import qualified Data.Text.Lazy as TL
+import qualified Data.Text.Lazy.Encoding as TLEncoding
+
+asInt32 :: Word32 -> Int32
+asInt32 w =
+    if w < 0x80000000
+    then fromIntegral w
+    else -1 * fromIntegral (0xFFFFFFFF - w + 1)
+
+asInt64 :: Word64 -> Int64
+asInt64 w =
+    if w < 0x8000000000000000
+    then fromIntegral w
+    else -1 * fromIntegral (0xFFFFFFFFFFFFFFFF - w + 1)
+
+getULEB128 :: (Integral a, Bits a) => Int -> Get a
+getULEB128 bitsBudget = do
+    if bitsBudget > 0 then return () else fail "integer representation too long"
+    val <- getWord8
+    if bitsBudget >= 7 || val .&. 0x7F < 1 `shiftL` bitsBudget then return () else fail "integer too large"
+    if not (testBit val 7)
+    then return $ fromIntegral val
+    else do
+        rest <- getULEB128 (bitsBudget - 7)
+        return $ (fromIntegral $ val .&. 0x7F) .|. (rest `shiftL` 7)
+
+putULEB128 :: (Integral a, Bits a) => a -> Put
+putULEB128 val =
+    if val < 128
+    then putWord8 $ fromIntegral val
+    else do
+        putWord8 $ 0x80 + (0x7F .&. fromIntegral val)
+        putULEB128 $ val `shiftR` 7
+
+getSLEB128 :: (Integral a, Bits a) => Int -> Get a
+getSLEB128 bitsBudget = do
+    if bitsBudget > 0 then return () else fail "integer representation too long"
+    let toInt8 :: Word8 -> Int8
+        toInt8 = fromIntegral
+    a <- getWord8
+    let mask = (0xFF `shiftL` (bitsBudget - 1)) .&. 0x7F
+    if bitsBudget >= 7 || a .&. mask == 0 || a .&. mask == mask then return () else fail "integer too large"
+    if not (testBit a 7)
+    then return . fromIntegral . toInt8 $ (a .&. 0x7f) .|. ((a .&. 0x40) `shiftL` 1)
+    else do
+        b <- getSLEB128 (bitsBudget - 7)
+        return $ (b `shiftL` 7) .|. (fromIntegral (a .&. 0x7f))
+
+putSLEB128 :: (Integral a, Bits a) => a -> Put
+putSLEB128 a = go a
+    where
+        ext = if a >= 0 then 0 else complement 0
+        go x = do
+            let 
+                r = x `shiftR` 7
+                w = x .&. 0x7f
+            if r /= ext
+            then do
+                putWord8 (fromIntegral w .|. 0x80)
+                go r
+            else
+                if (testBit w 6 && a < 0) || (not (testBit w 6) && a >= 0)
+                then putWord8 (fromIntegral w)
+                else do
+                    putWord8 (fromIntegral w .|. 0x80)
+                    putWord8 (fromIntegral ext .&. 0x7F)
+
+putVec :: Serialize a => [a] -> Put
+putVec list = do
+    putULEB128 $ length list
+    mapM put list
+    return ()
+
+getVec :: Serialize a => Get [a]
+getVec = do
+    len <- getULEB128 32
+    sequence $ replicate len get
+
+byteGuard :: Word8 -> Get ()
+byteGuard expected = do
+    byte <- getWord8
+    if byte == expected
+    then return ()
+    else fail $ "Expected " ++ show expected ++ ", but encountered " ++ show byte
+
+putSection :: SectionType -> Put -> Put
+putSection section content = do
+    put section
+    let payload = runPut content
+    putULEB128 $ BS.length payload
+    putByteString payload
+
+skipCustomSection :: Get ()
+skipCustomSection = do
+    byteGuard 0x00
+    size <- getULEB128 32
+    content <- getByteString size
+    case runGet getName content of
+        Right _name -> return ()
+        Left _ -> fail "invalid UTF-8 encoding"
+
+getSection :: SectionType -> Get a -> a -> Get a
+getSection sectionType parser def = do
+    empty <- isEmpty
+    if empty
+    then return def
+    else do
+        nextByte <- lookAhead getWord8
+        parseSection $ fromIntegral nextByte
+    where
+        parseSection op
+            | op == 0 = skipCustomSection >> getSection sectionType parser def
+            | op == fromEnum sectionType = getWord8 >> (getULEB128 32 :: Get Natural) >> parser
+            | op > fromEnum DataSection = fail "invalid section id"
+            | op > fromEnum sectionType = return def
+            | otherwise =
+                fail $ "Incorrect order of sections. Expected " ++ show sectionType
+                    ++ ", but found " ++ show (toEnum op :: SectionType)
+
+putName :: TL.Text -> Put
+putName txt = do
+    let bs = TLEncoding.encodeUtf8 txt
+    putULEB128 $ LBS.length bs
+    putLazyByteString bs
+
+getName :: Get TL.Text
+getName = do
+    len <- getULEB128 32
+    bytes <- getLazyByteString len
+    case TLEncoding.decodeUtf8' bytes of
+        Right name -> return name
+        Left _ -> fail "invalid UTF-8 encoding"
+
+putResultType :: ResultType -> Put
+putResultType [] = putWord8 0x40
+putResultType [valType] = put valType
+putResultType _ = fail "Current WebAssembly spec does not support returning more then one value"
+
+getResultType :: Get ResultType
+getResultType = do
+    op <- getWord8
+    case op of
+        0x40 -> return []
+        0x7F -> return [I32]
+        0x7E -> return [I64]
+        0x7D -> return [F32]
+        0x7C -> return [F64]
+        _ -> fail "unexpected byte in result type position"
+
+data SectionType =
+    CustomSection
+    | TypeSection
+    | ImportSection
+    | FunctionSection
+    | TableSection
+    | MemorySection
+    | GlobalSection
+    | ExportSection
+    | StartSection
+    | ElementSection
+    | CodeSection
+    | DataSection
+    deriving (Eq, Show, Enum)
+
+instance Serialize SectionType where
+    put section = putWord8 $ fromIntegral $ fromEnum section
+    get = do
+        op <- fromIntegral `fmap` getWord8
+        if op <= fromEnum DataSection
+        then return $ toEnum op
+        else fail "Unexpected byte in section type position"
+
+instance Serialize ValueType where
+    put I32 = putWord8 0x7F
+    put I64 = putWord8 0x7E
+    put F32 = putWord8 0x7D
+    put F64 = putWord8 0x7C
+
+    get = do
+        op <- getWord8
+        case op of
+            0x7F -> return I32
+            0x7E -> return I64
+            0x7D -> return F32
+            0x7C -> return F64
+            _ -> fail "unexpected byte in value type position"
+
+instance Serialize FuncType where
+    put FuncType {params, results} = do
+        putWord8 0x60
+        putVec params
+        putVec results
+    get = do
+        byteGuard 0x60
+        params <- getVec
+        results <- getVec
+        return $ FuncType { params, results }
+
+instance Serialize ElemType where
+    put AnyFunc = putWord8 0x70
+    get = byteGuard 0x70 >> return AnyFunc
+
+instance Serialize Limit where
+    put (Limit min Nothing) = putWord8 0x00 >> putULEB128 min
+    put (Limit min (Just max)) = putWord8 0x01 >> putULEB128 min >> putULEB128 max
+    get = do
+        op <- getWord8
+        case op of
+            0x00 -> do
+                min <- getULEB128 32
+                return $ Limit min Nothing
+            0x01 -> do
+                min <- getULEB128 32
+                max <- getULEB128 32
+                return $ Limit min (Just max)
+            _ -> fail "Unexpected byte in place of Limit opcode"
+
+instance Serialize TableType where
+    put (TableType limit elemType) = do
+        put elemType
+        put limit
+    get = do
+        elemType <- get
+        limit <- get
+        return $ TableType limit elemType
+
+instance Serialize GlobalType where
+    put (Const valType) = put valType >> putWord8 0x00
+    put (Mut valType) = put valType >> putWord8 0x01
+    get = do
+        valType <- get
+        op <- getWord8
+        case op of
+            0x00 -> return $ Const valType
+            0x01 -> return $ Mut valType
+            _ -> fail "invalid mutability"
+
+instance Serialize ImportDesc where
+    put (ImportFunc typeIdx) = putWord8 0x00 >> putULEB128 typeIdx
+    put (ImportTable tableType) = putWord8 0x01 >> put tableType
+    put (ImportMemory memType) = putWord8 0x02 >> put memType
+    put (ImportGlobal globalType) = putWord8 0x03 >> put globalType
+    get = do
+        op <- getWord8
+        case op of
+            0x00 -> ImportFunc <$> getULEB128 32
+            0x01 -> ImportTable <$> get
+            0x02 -> ImportMemory <$> get
+            0x03 -> ImportGlobal <$> get
+            _ -> fail "Unexpected byte in place of Import Declaration opcode"
+
+instance Serialize Import where
+    put (Import sourceModule name desc) = do
+        putName sourceModule
+        putName name
+        put desc
+    get = do
+        sourceModule <- getName
+        name <- getName
+        desc <- get
+        return $ Import sourceModule name desc
+
+instance Serialize Table where
+    put (Table tableType) = put tableType
+    get = Table <$> get
+
+instance Serialize Memory where
+    put (Memory limit) = put limit
+    get = Memory <$> get
+
+newtype Index = Index { unIndex :: Natural } deriving (Show, Eq)
+
+instance Serialize Index where
+    put (Index idx) = putULEB128 idx
+    get = Index <$> getULEB128 32
+
+instance Serialize MemArg where
+    put MemArg { align, offset } = putULEB128 align >> putULEB128 offset
+    get = do
+        align <- getULEB128 32
+        offset <- getULEB128 32
+        return $ MemArg { align, offset }
+
+instance Serialize (Instruction Natural) where
+    put Unreachable = putWord8 0x00
+    put Nop = putWord8 0x01
+    put (Block result body) = do
+        putWord8 0x02
+        putResultType result
+        putExpression body
+    put (Loop result body) = do
+        putWord8 0x03
+        putResultType result
+        putExpression body
+    put If {resultType, true, false = []} = do
+        putWord8 0x04
+        putResultType resultType
+        putExpression true
+    put If {resultType, true, false} = do
+        putWord8 0x04
+        putResultType resultType
+        mapM_ put true
+        putWord8 0x05 -- ELSE
+        putExpression false
+    put (Br labelIdx) = putWord8 0x0C >> putULEB128 labelIdx
+    put (BrIf labelIdx) = putWord8 0x0D >> putULEB128 labelIdx
+    put (BrTable labels label) = putWord8 0x0E >> putVec (map Index labels) >> putULEB128 label
+    put Return = putWord8 0x0F
+    put (Call funcIdx) = putWord8 0x10 >> putULEB128 funcIdx
+    put (CallIndirect typeIdx) = putWord8 0x11 >> putULEB128 typeIdx >> putWord8 0x00
+    -- Parametric instructions
+    put Drop = putWord8 0x1A
+    put Select = putWord8 0x1B
+    -- Variable instructions
+    put (GetLocal idx) = putWord8 0x20 >> putULEB128 idx
+    put (SetLocal idx) = putWord8 0x21 >> putULEB128 idx
+    put (TeeLocal idx) = putWord8 0x22 >> putULEB128 idx
+    put (GetGlobal idx) = putWord8 0x23 >> putULEB128 idx
+    put (SetGlobal idx) = putWord8 0x24 >> putULEB128 idx
+    -- Memory instructions
+    put (I32Load memArg) = putWord8 0x28 >> put memArg
+    put (I64Load memArg) = putWord8 0x29 >> put memArg
+    put (F32Load memArg) = putWord8 0x2A >> put memArg
+    put (F64Load memArg) = putWord8 0x2B >> put memArg
+    put (I32Load8S memArg) = putWord8 0x2C >> put memArg
+    put (I32Load8U memArg) = putWord8 0x2D >> put memArg
+    put (I32Load16S memArg) = putWord8 0x2E >> put memArg
+    put (I32Load16U memArg) = putWord8 0x2F >> put memArg
+    put (I64Load8S memArg) = putWord8 0x30 >> put memArg
+    put (I64Load8U memArg) = putWord8 0x31 >> put memArg
+    put (I64Load16S memArg) = putWord8 0x32 >> put memArg
+    put (I64Load16U memArg) = putWord8 0x33 >> put memArg
+    put (I64Load32S memArg) = putWord8 0x34 >> put memArg
+    put (I64Load32U memArg) = putWord8 0x35 >> put memArg
+    put (I32Store memArg) = putWord8 0x36 >> put memArg
+    put (I64Store memArg) = putWord8 0x37 >> put memArg
+    put (F32Store memArg) = putWord8 0x38 >> put memArg
+    put (F64Store memArg) = putWord8 0x39 >> put memArg
+    put (I32Store8 memArg) = putWord8 0x3A >> put memArg
+    put (I32Store16 memArg) = putWord8 0x3B >> put memArg
+    put (I64Store8 memArg) = putWord8 0x3C >> put memArg
+    put (I64Store16 memArg) = putWord8 0x3D >> put memArg
+    put (I64Store32 memArg) = putWord8 0x3E >> put memArg
+    put CurrentMemory = putWord8 0x3F >> putWord8 0x00
+    put GrowMemory = putWord8 0x40 >> putWord8 0x00
+    -- Numeric instructions
+    put (I32Const val) = putWord8 0x41 >> putSLEB128 (asInt32 val)
+    put (I64Const val) = putWord8 0x42 >> putSLEB128 (asInt64 val)
+    put (F32Const val) = putWord8 0x43 >> putFloat32le val
+    put (F64Const val) = putWord8 0x44 >> putFloat64le val
+    put I32Eqz = putWord8 0x45
+    put (IRelOp BS32 IEq) = putWord8 0x46
+    put (IRelOp BS32 INe) = putWord8 0x47
+    put (IRelOp BS32 ILtS) = putWord8 0x48
+    put (IRelOp BS32 ILtU) = putWord8 0x49
+    put (IRelOp BS32 IGtS) = putWord8 0x4A
+    put (IRelOp BS32 IGtU) = putWord8 0x4B
+    put (IRelOp BS32 ILeS) = putWord8 0x4C
+    put (IRelOp BS32 ILeU) = putWord8 0x4D
+    put (IRelOp BS32 IGeS) = putWord8 0x4E
+    put (IRelOp BS32 IGeU) = putWord8 0x4F
+    put I64Eqz = putWord8 0x50
+    put (IRelOp BS64 IEq) = putWord8 0x51
+    put (IRelOp BS64 INe) = putWord8 0x52
+    put (IRelOp BS64 ILtS) = putWord8 0x53
+    put (IRelOp BS64 ILtU) = putWord8 0x54
+    put (IRelOp BS64 IGtS) = putWord8 0x55
+    put (IRelOp BS64 IGtU) = putWord8 0x56
+    put (IRelOp BS64 ILeS) = putWord8 0x57
+    put (IRelOp BS64 ILeU) = putWord8 0x58
+    put (IRelOp BS64 IGeS) = putWord8 0x59
+    put (IRelOp BS64 IGeU) = putWord8 0x5A
+    put (FRelOp BS32 FEq) = putWord8 0x5B
+    put (FRelOp BS32 FNe) = putWord8 0x5C
+    put (FRelOp BS32 FLt) = putWord8 0x5D
+    put (FRelOp BS32 FGt) = putWord8 0x5E
+    put (FRelOp BS32 FLe) = putWord8 0x5F
+    put (FRelOp BS32 FGe) = putWord8 0x60
+    put (FRelOp BS64 FEq) = putWord8 0x61
+    put (FRelOp BS64 FNe) = putWord8 0x62
+    put (FRelOp BS64 FLt) = putWord8 0x63
+    put (FRelOp BS64 FGt) = putWord8 0x64
+    put (FRelOp BS64 FLe) = putWord8 0x65
+    put (FRelOp BS64 FGe) = putWord8 0x66
+    put (IUnOp BS32 IClz) = putWord8 0x67
+    put (IUnOp BS32 ICtz) = putWord8 0x68
+    put (IUnOp BS32 IPopcnt) = putWord8 0x69
+    put (IBinOp BS32 IAdd) = putWord8 0x6A
+    put (IBinOp BS32 ISub) = putWord8 0x6B
+    put (IBinOp BS32 IMul) = putWord8 0x6C
+    put (IBinOp BS32 IDivS) = putWord8 0x6D
+    put (IBinOp BS32 IDivU) = putWord8 0x6E
+    put (IBinOp BS32 IRemS) = putWord8 0x6F
+    put (IBinOp BS32 IRemU) = putWord8 0x70
+    put (IBinOp BS32 IAnd) = putWord8 0x71
+    put (IBinOp BS32 IOr) = putWord8 0x72
+    put (IBinOp BS32 IXor) = putWord8 0x73
+    put (IBinOp BS32 IShl) = putWord8 0x74
+    put (IBinOp BS32 IShrS) = putWord8 0x75
+    put (IBinOp BS32 IShrU) = putWord8 0x76
+    put (IBinOp BS32 IRotl) = putWord8 0x77
+    put (IBinOp BS32 IRotr) = putWord8 0x78
+    put (IUnOp BS64 IClz) = putWord8 0x79
+    put (IUnOp BS64 ICtz) = putWord8 0x7A
+    put (IUnOp BS64 IPopcnt) = putWord8 0x7B
+    put (IBinOp BS64 IAdd) = putWord8 0x7C
+    put (IBinOp BS64 ISub) = putWord8 0x7D
+    put (IBinOp BS64 IMul) = putWord8 0x7E
+    put (IBinOp BS64 IDivS) = putWord8 0x7F
+    put (IBinOp BS64 IDivU) = putWord8 0x80
+    put (IBinOp BS64 IRemS) = putWord8 0x81
+    put (IBinOp BS64 IRemU) = putWord8 0x82
+    put (IBinOp BS64 IAnd) = putWord8 0x83
+    put (IBinOp BS64 IOr) = putWord8 0x84
+    put (IBinOp BS64 IXor) = putWord8 0x85
+    put (IBinOp BS64 IShl) = putWord8 0x86
+    put (IBinOp BS64 IShrS) = putWord8 0x87
+    put (IBinOp BS64 IShrU) = putWord8 0x88
+    put (IBinOp BS64 IRotl) = putWord8 0x89
+    put (IBinOp BS64 IRotr) = putWord8 0x8A
+    put (FUnOp BS32 FAbs) = putWord8 0x8B
+    put (FUnOp BS32 FNeg) = putWord8 0x8C
+    put (FUnOp BS32 FCeil) = putWord8 0x8D
+    put (FUnOp BS32 FFloor) = putWord8 0x8E
+    put (FUnOp BS32 FTrunc) = putWord8 0x8F
+    put (FUnOp BS32 FNearest) = putWord8 0x90
+    put (FUnOp BS32 FSqrt) = putWord8 0x91
+    put (FBinOp BS32 FAdd) = putWord8 0x92
+    put (FBinOp BS32 FSub) = putWord8 0x93
+    put (FBinOp BS32 FMul) = putWord8 0x94
+    put (FBinOp BS32 FDiv) = putWord8 0x95
+    put (FBinOp BS32 FMin) = putWord8 0x96
+    put (FBinOp BS32 FMax) = putWord8 0x97
+    put (FBinOp BS32 FCopySign) = putWord8 0x98
+    put (FUnOp BS64 FAbs) = putWord8 0x99
+    put (FUnOp BS64 FNeg) = putWord8 0x9A
+    put (FUnOp BS64 FCeil) = putWord8 0x9B
+    put (FUnOp BS64 FFloor) = putWord8 0x9C
+    put (FUnOp BS64 FTrunc) = putWord8 0x9D
+    put (FUnOp BS64 FNearest) = putWord8 0x9E
+    put (FUnOp BS64 FSqrt) = putWord8 0x9F
+    put (FBinOp BS64 FAdd) = putWord8 0xA0
+    put (FBinOp BS64 FSub) = putWord8 0xA1
+    put (FBinOp BS64 FMul) = putWord8 0xA2
+    put (FBinOp BS64 FDiv) = putWord8 0xA3
+    put (FBinOp BS64 FMin) = putWord8 0xA4
+    put (FBinOp BS64 FMax) = putWord8 0xA5
+    put (FBinOp BS64 FCopySign) = putWord8 0xA6
+    put I32WrapI64 = putWord8 0xA7
+    put (ITruncFS BS32 BS32) = putWord8 0xA8
+    put (ITruncFU BS32 BS32) = putWord8 0xA9
+    put (ITruncFS BS32 BS64) = putWord8 0xAA
+    put (ITruncFU BS32 BS64) = putWord8 0xAB
+    put I64ExtendSI32 = putWord8 0xAC
+    put I64ExtendUI32 = putWord8 0xAD
+    put (ITruncFS BS64 BS32) = putWord8 0xAE
+    put (ITruncFU BS64 BS32) = putWord8 0xAF
+    put (ITruncFS BS64 BS64) = putWord8 0xB0
+    put (ITruncFU BS64 BS64) = putWord8 0xB1
+    put (FConvertIS BS32 BS32) = putWord8 0xB2
+    put (FConvertIU BS32 BS32) = putWord8 0xB3
+    put (FConvertIS BS32 BS64) = putWord8 0xB4
+    put (FConvertIU BS32 BS64) = putWord8 0xB5
+    put F32DemoteF64 = putWord8 0xB6
+    put (FConvertIS BS64 BS32) = putWord8 0xB7
+    put (FConvertIU BS64 BS32) = putWord8 0xB8
+    put (FConvertIS BS64 BS64) = putWord8 0xB9
+    put (FConvertIU BS64 BS64) = putWord8 0xBA
+    put F64PromoteF32 = putWord8 0xBB
+    put (IReinterpretF BS32) = putWord8 0xBC
+    put (IReinterpretF BS64) = putWord8 0xBD
+    put (FReinterpretI BS32) = putWord8 0xBE
+    put (FReinterpretI BS64) = putWord8 0xBF
+
+    get = do
+        op <- getWord8
+        case op of
+            0x00 -> return Unreachable
+            0x01 -> return Nop
+            0x02 -> Block <$> getResultType <*> getExpression
+            0x03 -> Loop <$> getResultType <*> getExpression
+            0x04 -> do
+                resultType <- getResultType
+                (true, hasElse) <- getTrueBranch
+                false <- if hasElse then getExpression else return []
+                return $ If resultType true false
+            0x0C -> Br <$> getULEB128 32
+            0x0D -> BrIf <$> getULEB128 32
+            0x0E -> BrTable <$> (map unIndex <$> getVec) <*> getULEB128 32
+            0x0F -> return $ Return
+            0x10 -> Call <$> getULEB128 32
+            0x11 -> do
+                typeIdx <- getULEB128 32
+                byteGuard 0x00
+                return $ CallIndirect typeIdx
+            -- Parametric instructions
+            0x1A -> return $ Drop
+            0x1B -> return $ Select
+            -- Variable instructions
+            0x20 -> GetLocal <$> getULEB128 32
+            0x21 -> SetLocal <$> getULEB128 32
+            0x22 -> TeeLocal <$> getULEB128 32
+            0x23 -> GetGlobal <$> getULEB128 32
+            0x24 -> SetGlobal <$> getULEB128 32
+            -- Memory instructions
+            0x28 -> I32Load <$> get
+            0x29 -> I64Load <$> get
+            0x2A -> F32Load <$> get
+            0x2B -> F64Load <$> get
+            0x2C -> I32Load8S <$> get
+            0x2D -> I32Load8U <$> get
+            0x2E -> I32Load16S <$> get
+            0x2F -> I32Load16U <$> get
+            0x30 -> I64Load8S <$> get
+            0x31 -> I64Load8U <$> get
+            0x32 -> I64Load16S <$> get
+            0x33 -> I64Load16U <$> get
+            0x34 -> I64Load32S <$> get
+            0x35 -> I64Load32U <$> get
+            0x36 -> I32Store <$> get
+            0x37 -> I64Store <$> get
+            0x38 -> F32Store <$> get
+            0x39 -> F64Store <$> get
+            0x3A -> I32Store8 <$> get
+            0x3B -> I32Store16 <$> get
+            0x3C -> I64Store8 <$> get
+            0x3D -> I64Store16 <$> get
+            0x3E -> I64Store32 <$> get
+            0x3F -> byteGuard 0x00 >> (return $ CurrentMemory)
+            0x40 -> byteGuard 0x00 >> (return $ GrowMemory)
+            -- Numeric instructions
+            0x41 -> I32Const <$> getSLEB128 32
+            0x42 -> I64Const <$> getSLEB128 64
+            0x43 -> F32Const <$> getFloat32le
+            0x44 -> F64Const <$> getFloat64le
+            0x45 -> return $ I32Eqz
+            0x46 -> return $ IRelOp BS32 IEq
+            0x47 -> return $ IRelOp BS32 INe
+            0x48 -> return $ IRelOp BS32 ILtS
+            0x49 -> return $ IRelOp BS32 ILtU
+            0x4A -> return $ IRelOp BS32 IGtS
+            0x4B -> return $ IRelOp BS32 IGtU
+            0x4C -> return $ IRelOp BS32 ILeS
+            0x4D -> return $ IRelOp BS32 ILeU
+            0x4E -> return $ IRelOp BS32 IGeS
+            0x4F -> return $ IRelOp BS32 IGeU
+            0x50 -> return $ I64Eqz
+            0x51 -> return $ IRelOp BS64 IEq
+            0x52 -> return $ IRelOp BS64 INe
+            0x53 -> return $ IRelOp BS64 ILtS
+            0x54 -> return $ IRelOp BS64 ILtU
+            0x55 -> return $ IRelOp BS64 IGtS
+            0x56 -> return $ IRelOp BS64 IGtU
+            0x57 -> return $ IRelOp BS64 ILeS
+            0x58 -> return $ IRelOp BS64 ILeU
+            0x59 -> return $ IRelOp BS64 IGeS
+            0x5A -> return $ IRelOp BS64 IGeU
+            0x5B -> return $ FRelOp BS32 FEq
+            0x5C -> return $ FRelOp BS32 FNe
+            0x5D -> return $ FRelOp BS32 FLt
+            0x5E -> return $ FRelOp BS32 FGt
+            0x5F -> return $ FRelOp BS32 FLe
+            0x60 -> return $ FRelOp BS32 FGe
+            0x61 -> return $ FRelOp BS64 FEq
+            0x62 -> return $ FRelOp BS64 FNe
+            0x63 -> return $ FRelOp BS64 FLt
+            0x64 -> return $ FRelOp BS64 FGt
+            0x65 -> return $ FRelOp BS64 FLe
+            0x66 -> return $ FRelOp BS64 FGe
+            0x67 -> return $ IUnOp BS32 IClz
+            0x68 -> return $ IUnOp BS32 ICtz
+            0x69 -> return $ IUnOp BS32 IPopcnt
+            0x6A -> return $ IBinOp BS32 IAdd
+            0x6B -> return $ IBinOp BS32 ISub
+            0x6C -> return $ IBinOp BS32 IMul
+            0x6D -> return $ IBinOp BS32 IDivS
+            0x6E -> return $ IBinOp BS32 IDivU
+            0x6F -> return $ IBinOp BS32 IRemS
+            0x70 -> return $ IBinOp BS32 IRemU
+            0x71 -> return $ IBinOp BS32 IAnd
+            0x72 -> return $ IBinOp BS32 IOr
+            0x73 -> return $ IBinOp BS32 IXor
+            0x74 -> return $ IBinOp BS32 IShl
+            0x75 -> return $ IBinOp BS32 IShrS
+            0x76 -> return $ IBinOp BS32 IShrU
+            0x77 -> return $ IBinOp BS32 IRotl
+            0x78 -> return $ IBinOp BS32 IRotr
+            0x79 -> return $ IUnOp BS64 IClz
+            0x7A -> return $ IUnOp BS64 ICtz
+            0x7B -> return $ IUnOp BS64 IPopcnt
+            0x7C -> return $ IBinOp BS64 IAdd
+            0x7D -> return $ IBinOp BS64 ISub
+            0x7E -> return $ IBinOp BS64 IMul
+            0x7F -> return $ IBinOp BS64 IDivS
+            0x80 -> return $ IBinOp BS64 IDivU
+            0x81 -> return $ IBinOp BS64 IRemS
+            0x82 -> return $ IBinOp BS64 IRemU
+            0x83 -> return $ IBinOp BS64 IAnd
+            0x84 -> return $ IBinOp BS64 IOr
+            0x85 -> return $ IBinOp BS64 IXor
+            0x86 -> return $ IBinOp BS64 IShl
+            0x87 -> return $ IBinOp BS64 IShrS
+            0x88 -> return $ IBinOp BS64 IShrU
+            0x89 -> return $ IBinOp BS64 IRotl
+            0x8A -> return $ IBinOp BS64 IRotr
+            0x8B -> return $ FUnOp BS32 FAbs
+            0x8C -> return $ FUnOp BS32 FNeg
+            0x8D -> return $ FUnOp BS32 FCeil
+            0x8E -> return $ FUnOp BS32 FFloor
+            0x8F -> return $ FUnOp BS32 FTrunc
+            0x90 -> return $ FUnOp BS32 FNearest
+            0x91 -> return $ FUnOp BS32 FSqrt
+            0x92 -> return $ FBinOp BS32 FAdd
+            0x93 -> return $ FBinOp BS32 FSub
+            0x94 -> return $ FBinOp BS32 FMul
+            0x95 -> return $ FBinOp BS32 FDiv
+            0x96 -> return $ FBinOp BS32 FMin
+            0x97 -> return $ FBinOp BS32 FMax
+            0x98 -> return $ FBinOp BS32 FCopySign
+            0x99 -> return $ FUnOp BS64 FAbs
+            0x9A -> return $ FUnOp BS64 FNeg
+            0x9B -> return $ FUnOp BS64 FCeil
+            0x9C -> return $ FUnOp BS64 FFloor
+            0x9D -> return $ FUnOp BS64 FTrunc
+            0x9E -> return $ FUnOp BS64 FNearest
+            0x9F -> return $ FUnOp BS64 FSqrt
+            0xA0 -> return $ FBinOp BS64 FAdd
+            0xA1 -> return $ FBinOp BS64 FSub
+            0xA2 -> return $ FBinOp BS64 FMul
+            0xA3 -> return $ FBinOp BS64 FDiv
+            0xA4 -> return $ FBinOp BS64 FMin
+            0xA5 -> return $ FBinOp BS64 FMax
+            0xA6 -> return $ FBinOp BS64 FCopySign
+            0xA7 -> return $ I32WrapI64
+            0xA8 -> return $ ITruncFS BS32 BS32
+            0xA9 -> return $ ITruncFU BS32 BS32
+            0xAA -> return $ ITruncFS BS32 BS64
+            0xAB -> return $ ITruncFU BS32 BS64
+            0xAC -> return $ I64ExtendSI32
+            0xAD -> return $ I64ExtendUI32
+            0xAE -> return $ ITruncFS BS64 BS32
+            0xAF -> return $ ITruncFU BS64 BS32
+            0xB0 -> return $ ITruncFS BS64 BS64
+            0xB1 -> return $ ITruncFU BS64 BS64
+            0xB2 -> return $ FConvertIS BS32 BS32
+            0xB3 -> return $ FConvertIU BS32 BS32
+            0xB4 -> return $ FConvertIS BS32 BS64
+            0xB5 -> return $ FConvertIU BS32 BS64
+            0xB6 -> return $ F32DemoteF64
+            0xB7 -> return $ FConvertIS BS64 BS32
+            0xB8 -> return $ FConvertIU BS64 BS32
+            0xB9 -> return $ FConvertIS BS64 BS64
+            0xBA -> return $ FConvertIU BS64 BS64
+            0xBB -> return $ F64PromoteF32
+            0xBC -> return $ IReinterpretF BS32
+            0xBD -> return $ IReinterpretF BS64
+            0xBE -> return $ FReinterpretI BS32
+            0xBF -> return $ FReinterpretI BS64
+            _ -> fail "Unknown byte value in place of instruction opcode"
+
+putExpression :: Expression -> Put
+putExpression expr = do
+    mapM_ put expr
+    putWord8 0x0B -- END
+
+getExpression :: Get Expression
+getExpression = go []
+    where
+        go :: Expression -> Get Expression
+        go acc = do
+            nextByte <- lookAhead getWord8
+            if nextByte == 0x0B -- END OF EXPR
+            then getWord8 >> (return $ reverse acc)
+            else get >>= \instr -> go (instr : acc)
+
+getTrueBranch :: Get (Expression, Bool)
+getTrueBranch = go []
+    where
+        go :: Expression -> Get (Expression, Bool)
+        go acc = do
+            nextByte <- lookAhead getWord8
+            case nextByte of
+                -- END OF EXPR
+                0x0B -> getWord8 >> (return $ (reverse acc, False))
+                -- ELSE 
+                0x05 -> getWord8 >> (return $ (reverse acc, True))
+                _ -> get >>= \instr -> go (instr : acc)
+
+instance Serialize Global where
+    put (Global globalType expr) = do
+        put globalType
+        putExpression expr
+    get = Global <$> get <*> getExpression
+
+instance Serialize ExportDesc where
+    put (ExportFunc idx) = putWord8 0x00 >> putULEB128 idx
+    put (ExportTable idx) = putWord8 0x01 >> putULEB128 idx
+    put (ExportMemory idx) = putWord8 0x02 >> putULEB128 idx
+    put (ExportGlobal idx) = putWord8 0x03 >> putULEB128 idx
+    get = do
+        op <- getWord8
+        idx <- getULEB128 32
+        case op of
+            0x00 -> return $ ExportFunc idx
+            0x01 -> return $ ExportTable idx
+            0x02 -> return $ ExportMemory idx
+            0x03 -> return $ ExportGlobal idx
+            _ -> fail "Unexpected byte value in position of Export Description opcode"
+
+instance Serialize Export where
+    put (Export name desc) = do
+        putName name
+        put desc
+    get = Export <$> getName <*> get
+
+instance Serialize ElemSegment where
+    put (ElemSegment tableIndex offset funcIndexes) = do
+        putULEB128 tableIndex
+        putExpression offset
+        putVec $ map Index funcIndexes
+    get = ElemSegment <$> getULEB128 32 <*> getExpression <*> (map unIndex <$> getVec)
+
+data LocalTypeRange = LocalTypeRange Natural ValueType deriving (Show, Eq)
+
+instance Serialize LocalTypeRange where
+    put (LocalTypeRange len valType) = do
+        putULEB128 len
+        put valType
+    get = LocalTypeRange <$> getULEB128 32 <*> get
+
+instance Serialize Function where
+    put Function {localTypes = locals, body} = do
+        let bs = runPut $ do
+                putVec $ map (LocalTypeRange 1) locals
+                putExpression body
+        putULEB128 $ BS.length bs
+        putByteString bs
+    get = do
+        _size <- getULEB128 32 :: Get Natural
+        locals <- concat . map (\(LocalTypeRange n val) -> replicate (fromIntegral n) val) <$> getVec
+        body <- getExpression
+        return $ Function 0 locals body
+
+instance Serialize DataSegment where
+    put (DataSegment memIdx offset init) = do
+        putULEB128 memIdx
+        putExpression offset
+        putULEB128 $ LBS.length init
+        putLazyByteString init
+    get = do
+        memIdx <- getULEB128 32
+        offset <- getExpression
+        len <- getULEB128 32
+        init <- getLazyByteString len
+        return $ DataSegment memIdx offset init
+
+instance Serialize Module where
+    put mod = do
+        -- magic
+        mapM_ putWord8 [0x00, 0x61, 0x73, 0x6D]
+        -- version
+        mapM_ putWord8 [0x01, 0x00, 0x00, 0x00]
+
+        putSection TypeSection $ putVec $ types mod
+        putSection ImportSection $ putVec $ imports mod
+        putSection FunctionSection $ putVec $ map (Index . funcType) $ functions mod
+        putSection TableSection $ putVec $ tables mod
+        putSection MemorySection $ putVec $ mems mod
+        putSection GlobalSection $ putVec $ globals mod
+        putSection ExportSection $ putVec $ exports mod
+        case start mod of
+            Just (StartFunction idx) -> putSection StartSection $ putULEB128 idx
+            Nothing -> return ()
+        putSection ElementSection $ putVec $ elems mod
+        putSection CodeSection $ putVec $ functions mod
+        putSection DataSection $ putVec $ datas mod
+        
+    get = do
+        magic <- getWord32be
+        if magic == 0x0061736D then return () else fail "magic header not detected"
+        version <- getWord32be
+        if version == 0x01000000 then return () else fail "unknown binary version"
+        types <- getSection TypeSection getVec []
+        imports <- getSection ImportSection getVec []
+        funcTypes <- getSection FunctionSection getVec []
+        tables <- getSection TableSection getVec []
+        mems <- getSection MemorySection getVec []
+        globals <- getSection GlobalSection getVec []
+        exports <- getSection ExportSection getVec []
+        start <- getSection StartSection (Just . StartFunction <$> getULEB128 32) Nothing
+        elems <- getSection ElementSection getVec []
+        functions <- getSection CodeSection getVec []
+        datas <- getSection DataSection getVec []
+        if length funcTypes /= length functions
+        then fail "function and code section have inconsistent lengths"
+        else return ()
+        return $ emptyModule {
+            types,
+            imports,
+            tables,
+            mems,
+            globals,
+            exports,
+            start,
+            elems,
+            functions = zipWith (\(Index funcType) fun -> fun { funcType }) funcTypes functions,
+            datas
+        }
+
+
+dumpModule :: Module -> BS.ByteString
+dumpModule = encode
+
+dumpModuleLazy :: Module -> LBS.ByteString
+dumpModuleLazy = encodeLazy
+
+decodeModule :: BS.ByteString -> Either String Module
+decodeModule = decode
+
+decodeModuleLazy :: LBS.ByteString -> Either String Module
+decodeModuleLazy = decodeLazy
diff --git a/src/Language/Wasm/Builder.hs b/src/Language/Wasm/Builder.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/Builder.hs
@@ -0,0 +1,1026 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE PolyKinds #-}
+{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE TypeInType #-}
+{-# LANGUAGE TypeSynonymInstances #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Language.Wasm.Builder (
+    GenMod,
+    genMod,
+    global, typedef, fun, funRec, declare, implement, table, memory, dataSegment,
+    importFunction, importGlobal, importMemory, importTable,
+    export,
+    nextFuncIndex, setGlobalInitializer,
+    GenFun,
+    Glob, Loc, Fn(..), Mem, Tbl, Label,
+    param, local, label,
+    ret,
+    arg,
+    i32, i64, f32, f64,
+    i32c, i64c, f32c, f64c,
+    add, inc, sub, dec, mul, div_u, div_s, rem_u, rem_s, and, or, xor, shl, shr_u, shr_s, rotl, rotr,
+    clz, ctz, popcnt,
+    eq, ne, lt_s, lt_u, gt_s, gt_u, le_s, le_u, ge_s, ge_u,
+    eqz,
+    div_f, min_f, max_f, copySign,
+    abs_f, neg_f, ceil_f, floor_f, trunc_f, nearest_f, sqrt_f,
+    lt_f, gt_f, le_f, ge_f,
+    wrap, trunc_s, trunc_u, extend_s, extend_u, convert_s, convert_u, demote, promote, reinterpret,
+    load, load8_u, load8_s, load16_u, load16_s, load32_u, load32_s,
+    store, store8, store16, store32,
+    memorySize, growMemory,
+    nop, Language.Wasm.Builder.drop, select,
+    call, callIndirect, finish, br, brIf, brTable,
+    if', loop, block, when, for, while,
+    trap, unreachable,
+    appendExpr, after,
+    Producer, OutType, produce, Consumer, (.=)
+) where
+
+import Prelude hiding (and, or)
+import qualified Data.List as List
+import qualified Data.Maybe as Maybe
+import Control.Monad.State (State, execState, get, gets, put, modify)
+import Control.Monad.Reader (ReaderT, ask, runReaderT)
+import Numeric.Natural
+import Data.Word (Word32, Word64)
+import Data.Int (Int32, Int64)
+import Data.Proxy
+
+import qualified Data.Text.Lazy as TL
+import qualified Data.ByteString.Lazy as LBS
+
+import Language.Wasm.Structure
+
+data FuncDef = FuncDef {
+    args :: [ValueType],
+    returns :: [ValueType],
+    locals :: [ValueType],
+    instrs :: Expression
+} deriving (Show, Eq)
+
+type GenFun = ReaderT Natural (State FuncDef)
+
+genExpr :: Natural -> GenFun a -> Expression
+genExpr deep gen = instrs $ flip execState (FuncDef [] [] [] []) $ runReaderT gen deep
+
+newtype Loc t = Loc Natural deriving (Show, Eq)
+
+param :: (ValueTypeable t) => Proxy t -> GenFun (Loc t)
+param t = do
+    f@FuncDef { args } <- get
+    put $ f { args = args ++ [getValueType t] }
+    return $ Loc $ fromIntegral $ length args
+
+local :: (ValueTypeable t) => Proxy t -> GenFun (Loc t)
+local t = do
+    f@FuncDef { args, locals } <- get
+    put $ f { locals = locals ++ [getValueType t]}
+    return $ Loc $ fromIntegral $ length args + length locals
+
+appendExpr :: Expression -> GenFun ()
+appendExpr expr = do
+    modify $ \def -> def { instrs = instrs def ++ expr }
+    return ()
+
+after :: Expression -> GenFun a -> GenFun a
+after instr expr = do
+    res <- expr
+    modify $ \def -> def { instrs = instrs def ++ instr }
+    return res
+
+data TypedExpr
+    = ExprI32 (GenFun (Proxy I32))
+    | ExprI64 (GenFun (Proxy I64))
+    | ExprF32 (GenFun (Proxy F32))
+    | ExprF64 (GenFun (Proxy F64))
+
+class Producer expr where
+    type OutType expr
+    asTypedExpr :: expr -> TypedExpr
+    asValueType :: expr -> ValueType
+    produce :: expr -> GenFun (OutType expr)
+
+instance (ValueTypeable t) => Producer (Loc t) where
+    type OutType (Loc t) = Proxy t
+    asTypedExpr e = case getValueType (t e) of
+        I32 -> ExprI32 (produce e >> return Proxy)
+        I64 -> ExprI64 (produce e >> return Proxy)
+        F32 -> ExprF32 (produce e >> return Proxy)
+        F64 -> ExprF64 (produce e >> return Proxy)
+        where
+            t :: Loc t -> Proxy t
+            t _ = Proxy
+    asValueType e = getValueType (t e)
+        where
+            t :: Loc t -> Proxy t
+            t _ = Proxy
+    produce (Loc i) = appendExpr [GetLocal i] >> return Proxy
+
+instance (ValueTypeable t) => Producer (Glob t) where
+    type OutType (Glob t) = Proxy t
+    asTypedExpr e = case getValueType (t e) of
+        I32 -> ExprI32 (produce e >> return Proxy)
+        I64 -> ExprI64 (produce e >> return Proxy)
+        F32 -> ExprF32 (produce e >> return Proxy)
+        F64 -> ExprF64 (produce e >> return Proxy)
+        where
+            t :: Glob t -> Proxy t
+            t _ = Proxy
+    asValueType e = getValueType (t e)
+        where
+            t :: Glob t -> Proxy t
+            t _ = Proxy
+    produce (Glob i) = appendExpr [GetGlobal i] >> return Proxy
+
+instance (ValueTypeable t) => Producer (GenFun (Proxy t)) where
+    type OutType (GenFun (Proxy t)) = Proxy t
+    asTypedExpr e = case getValueType (t e) of
+        I32 -> ExprI32 (produce e >> return Proxy)
+        I64 -> ExprI64 (produce e >> return Proxy)
+        F32 -> ExprF32 (produce e >> return Proxy)
+        F64 -> ExprF64 (produce e >> return Proxy)
+        where
+            t :: GenFun (Proxy t) -> Proxy t
+            t _ = Proxy
+    asValueType e = getValueType (t e)
+        where
+            t :: GenFun (Proxy t) -> Proxy t
+            t _ = Proxy
+    produce = id
+
+ret :: (Producer expr) => expr -> GenFun (OutType expr)
+ret = produce
+
+arg :: (Producer expr) => expr -> GenFun ()
+arg e = produce e >> return ()
+
+getSize :: ValueType -> BitSize
+getSize I32 = BS32
+getSize I64 = BS64
+getSize F32 = BS32
+getSize F64 = BS64
+
+type family IsInt i :: Bool where
+    IsInt (Proxy I32) = True
+    IsInt (Proxy I64) = True
+    IsInt any         = False
+
+type family IsFloat i :: Bool where
+    IsFloat (Proxy F32) = True
+    IsFloat (Proxy F64) = True
+    IsFloat any         = False
+
+nop :: GenFun ()
+nop = appendExpr [Nop]
+
+drop :: (Producer val) => val -> GenFun ()
+drop val = do
+    produce val
+    appendExpr [Drop]
+
+select :: (Producer a, Producer b, OutType a ~ OutType b, Producer pred, OutType pred ~ Proxy I32) => pred -> a -> b -> GenFun (OutType a)
+select pred a b = select' (produce pred) (produce a) (produce b)
+    where
+        select' :: GenFun pred -> GenFun val -> GenFun val -> GenFun val
+        select' pred a b = do
+            a
+            res <- b
+            pred
+            appendExpr [Select]
+            return res
+
+iBinOp :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => IBinOp -> a -> b -> GenFun (OutType a)
+iBinOp op a b = produce a >> after [IBinOp (getSize $ asValueType a) op] (produce b)
+
+iUnOp :: (Producer a, IsInt (OutType a) ~ True) => IUnOp -> a -> GenFun (OutType a)
+iUnOp op a = after [IUnOp (getSize $ asValueType a) op] (produce a)
+
+iRelOp :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => IRelOp -> a -> b -> GenFun (Proxy I32)
+iRelOp op a b = do
+    produce a
+    produce b
+    appendExpr [IRelOp (getSize $ asValueType a) op]
+    return Proxy
+
+add :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (OutType a)
+add a b = do
+    produce a
+    case asValueType a of
+        I32 -> after [IBinOp BS32 IAdd] (produce b)
+        I64 -> after [IBinOp BS64 IAdd] (produce b)
+        F32 -> after [FBinOp BS32 FAdd] (produce b)
+        F64 -> after [FBinOp BS64 FAdd] (produce b)
+
+inc :: (Consumer a, Producer a, Integral i) => i -> a -> GenFun ()
+inc i a = case asTypedExpr a of
+    ExprI32 e -> a .= (e `add` i32c i)
+    ExprI64 e -> a .= (e `add` i64c i)
+    ExprF32 e -> a .= (e `add` f32c (fromIntegral i))
+    ExprF64 e -> a .= (e `add` f64c (fromIntegral i))
+
+sub :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (OutType a)
+sub a b = do
+    produce a
+    case asValueType a of
+        I32 -> after [IBinOp BS32 ISub] (produce b)
+        I64 -> after [IBinOp BS64 ISub] (produce b)
+        F32 -> after [FBinOp BS32 FSub] (produce b)
+        F64 -> after [FBinOp BS64 FSub] (produce b)
+
+dec :: (Consumer a, Producer a, Integral i) => i -> a -> GenFun ()
+dec i a = case asTypedExpr a of
+    ExprI32 e -> a .= (e `sub` i32c i)
+    ExprI64 e -> a .= (e `sub` i64c i)
+    ExprF32 e -> a .= (e `sub` f32c (fromIntegral i))
+    ExprF64 e -> a .= (e `sub` f64c (fromIntegral i))
+
+mul :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (OutType a)
+mul a b = do
+    produce a
+    case asValueType a of
+        I32 -> after [IBinOp BS32 IMul] (produce b)
+        I64 -> after [IBinOp BS64 IMul] (produce b)
+        F32 -> after [FBinOp BS32 FMul] (produce b)
+        F64 -> after [FBinOp BS64 FMul] (produce b)
+
+div_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+div_u = iBinOp IDivU
+
+div_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+div_s = iBinOp IDivS
+
+rem_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+rem_u = iBinOp IRemU
+
+rem_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+rem_s = iBinOp IRemS
+
+and :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+and = iBinOp IAnd
+
+or :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+or = iBinOp IOr
+
+xor :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+xor = iBinOp IXor
+
+shl :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+shl = iBinOp IShl
+
+shr_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+shr_u = iBinOp IShrU
+
+shr_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+shr_s = iBinOp IShrS
+
+rotl :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+rotl = iBinOp IRotl
+
+rotr :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+rotr = iBinOp IRotr 
+
+clz :: (Producer a, IsInt (OutType a) ~ True) => a -> GenFun (OutType a)
+clz = iUnOp IClz
+
+ctz :: (Producer a, IsInt (OutType a) ~ True) => a -> GenFun (OutType a)
+ctz = iUnOp ICtz
+
+popcnt :: (Producer a, IsInt (OutType a) ~ True) => a -> GenFun (OutType a)
+popcnt = iUnOp IPopcnt
+
+eq :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (Proxy I32)
+eq a b = do
+    produce a
+    produce b
+    case asValueType a of
+        I32 -> appendExpr [IRelOp BS32 IEq]
+        I64 -> appendExpr [IRelOp BS64 IEq]
+        F32 -> appendExpr [FRelOp BS32 FEq]
+        F64 -> appendExpr [FRelOp BS64 FEq]
+    return Proxy
+
+ne :: (Producer a, Producer b, OutType a ~ OutType b) => a -> b -> GenFun (Proxy I32)
+ne a b = do
+    produce a
+    produce b
+    case asValueType a of
+        I32 -> appendExpr [IRelOp BS32 INe]
+        I64 -> appendExpr [IRelOp BS64 INe]
+        F32 -> appendExpr [FRelOp BS32 FNe]
+        F64 -> appendExpr [FRelOp BS64 FNe]
+    return Proxy
+
+lt_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+lt_s = iRelOp ILtS
+
+lt_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+lt_u = iRelOp ILtU
+
+gt_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+gt_s = iRelOp IGtS
+
+gt_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+gt_u = iRelOp IGtU
+
+le_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+le_s = iRelOp ILeS
+
+le_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+le_u = iRelOp ILeU
+
+ge_s :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+ge_s = iRelOp IGeS
+
+ge_u :: (Producer a, Producer b, OutType a ~ OutType b, IsInt (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+ge_u = iRelOp IGeU
+
+eqz :: (Producer a, IsInt (OutType a) ~ True) => a -> GenFun (Proxy I32)
+eqz a = do
+    produce a
+    case asValueType a of
+        I32 -> appendExpr [I32Eqz]
+        I64 -> appendExpr [I64Eqz]
+        _ -> error "Impossible by type constraint"
+    return Proxy
+
+fBinOp :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => FBinOp -> a -> b -> GenFun (OutType a)
+fBinOp op a b = produce a >> after [FBinOp (getSize $ asValueType a) op] (produce b)
+
+fUnOp :: (Producer a, IsFloat (OutType a) ~ True) => FUnOp -> a -> GenFun (OutType a)
+fUnOp op a = after [FUnOp (getSize $ asValueType a) op] (produce a)
+
+fRelOp :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => FRelOp -> a -> b -> GenFun (Proxy I32)
+fRelOp op a b = do
+    produce a
+    produce b
+    appendExpr [FRelOp (getSize $ asValueType a) op]
+    return Proxy
+
+div_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+div_f = fBinOp FDiv
+
+min_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+min_f = fBinOp FMin
+
+max_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+max_f = fBinOp FMax
+
+copySign :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (OutType a)
+copySign = fBinOp FCopySign
+
+abs_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)
+abs_f = fUnOp FAbs
+
+neg_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)
+neg_f = fUnOp FNeg
+
+ceil_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)
+ceil_f = fUnOp FCeil
+
+floor_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)
+floor_f = fUnOp FFloor
+
+trunc_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)
+trunc_f = fUnOp FTrunc
+
+nearest_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)
+nearest_f = fUnOp FAbs
+
+sqrt_f :: (Producer a, IsFloat (OutType a) ~ True) => a -> GenFun (OutType a)
+sqrt_f = fUnOp FAbs
+
+lt_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+lt_f = fRelOp FLt
+
+gt_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+gt_f = fRelOp FGt
+
+le_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+le_f = fRelOp FLe
+
+ge_f :: (Producer a, Producer b, OutType a ~ OutType b, IsFloat (OutType a) ~ True) => a -> b -> GenFun (Proxy I32)
+ge_f = fRelOp FGe
+
+i32c :: (Integral i) => i -> GenFun (Proxy I32)
+i32c i = appendExpr [I32Const $ asWord32 $ fromIntegral i] >> return Proxy
+
+i64c :: (Integral i) => i -> GenFun (Proxy I64)
+i64c i = appendExpr [I64Const $ asWord64 $ fromIntegral i] >> return Proxy
+
+f32c :: Float -> GenFun (Proxy F32)
+f32c f = appendExpr [F32Const f] >> return Proxy
+
+f64c :: Double -> GenFun (Proxy F64)
+f64c d = appendExpr [F64Const d] >> return Proxy
+
+wrap :: (Producer i, OutType i ~ Proxy I64) => i -> GenFun (Proxy I32)
+wrap big = do
+    produce big
+    appendExpr [I32WrapI64]
+    return Proxy
+
+trunc_u :: (Producer f, IsFloat (OutType f) ~ True, IsInt (Proxy t) ~ True, ValueTypeable t) => Proxy t -> f -> GenFun (Proxy t)
+trunc_u t float = do
+    produce float
+    appendExpr [ITruncFU (getSize $ getValueType t) (getSize $ asValueType float)]
+    return Proxy
+
+trunc_s :: (Producer f, IsFloat (OutType f) ~ True, IsInt (Proxy t) ~ True, ValueTypeable t) => Proxy t -> f -> GenFun (Proxy t)
+trunc_s t float = do
+    produce float
+    appendExpr [ITruncFS (getSize $ getValueType t) (getSize $ asValueType float)]
+    return Proxy
+
+extend_u :: (Producer i, OutType i ~ Proxy I32) => i -> GenFun (Proxy I64)
+extend_u small = do
+    produce small
+    appendExpr [I64ExtendUI32]
+    return Proxy
+
+extend_s :: (Producer i, OutType i ~ Proxy I32) => i -> GenFun (Proxy I64)
+extend_s small = do
+    produce small
+    appendExpr [I64ExtendSI32]
+    return Proxy
+
+convert_u :: (Producer i, IsInt (OutType i) ~ True, IsFloat (Proxy t) ~ True, ValueTypeable t) => Proxy t -> i -> GenFun (Proxy t)
+convert_u t int = do
+    produce int
+    appendExpr [FConvertIU (getSize $ getValueType t) (getSize $ asValueType int)]
+    return Proxy
+
+convert_s :: (Producer i, IsInt (OutType i) ~ True, IsFloat (Proxy t) ~ True, ValueTypeable t) => Proxy t -> i -> GenFun (Proxy t)
+convert_s t int = do
+    produce int
+    appendExpr [FConvertIS (getSize $ getValueType t) (getSize $ asValueType int)]
+    return Proxy
+
+demote :: (Producer f, OutType f ~ Proxy F64) => f -> GenFun (Proxy F32)
+demote f = do
+    produce f
+    appendExpr [F32DemoteF64]
+    return Proxy
+
+promote :: (Producer f, OutType f ~ Proxy F32) => f -> GenFun (Proxy F64)
+promote f = do
+    produce f
+    appendExpr [F64PromoteF32]
+    return Proxy
+
+type family SameSize a b where
+    SameSize (Proxy I32) (Proxy F32) = True
+    SameSize (Proxy I64) (Proxy F64) = True
+    SameSize (Proxy F32) (Proxy I32) = True
+    SameSize (Proxy F64) (Proxy I64) = True
+    SameSize a           b           = False
+
+reinterpret :: (ValueTypeable t, Producer val, SameSize (Proxy t) (OutType val) ~ True) => Proxy t -> val -> GenFun (Proxy t)
+reinterpret t val = do
+    case (getValueType t, asValueType val) of
+        (I32, F32) -> appendExpr [IReinterpretF BS32]
+        (I64, F64) -> appendExpr [IReinterpretF BS64]
+        (F32, I32) -> appendExpr [FReinterpretI BS32]
+        (F64, I64) -> appendExpr [FReinterpretI BS64]
+        _ -> error "Impossible by type constraint"
+    return Proxy
+
+load :: (ValueTypeable t, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)
+    => Proxy t
+    -> addr
+    -> offset
+    -> align
+    -> GenFun (Proxy t)
+load t addr offset align = do
+    produce addr
+    case getValueType t of
+        I32 -> appendExpr [I32Load $ MemArg (fromIntegral offset) (fromIntegral align)]
+        I64 -> appendExpr [I64Load $ MemArg (fromIntegral offset) (fromIntegral align)]
+        F32 -> appendExpr [F32Load $ MemArg (fromIntegral offset) (fromIntegral align)]
+        F64 -> appendExpr [F64Load $ MemArg (fromIntegral offset) (fromIntegral align)]
+    return Proxy
+
+load8_u :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)
+    => Proxy t
+    -> addr
+    -> offset
+    -> align
+    -> GenFun (Proxy t)
+load8_u t addr offset align = do
+    produce addr
+    case getValueType t of
+        I32 -> appendExpr [I32Load8U $ MemArg (fromIntegral offset) (fromIntegral align)]
+        I64 -> appendExpr [I64Load8U $ MemArg (fromIntegral offset) (fromIntegral align)]
+        _ -> error "Impossible by type constraint"
+    return Proxy
+
+load8_s :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)
+    => Proxy t
+    -> addr
+    -> offset
+    -> align
+    -> GenFun (Proxy t)
+load8_s t addr offset align = do
+    produce addr
+    case getValueType t of
+        I32 -> appendExpr [I32Load8S $ MemArg (fromIntegral offset) (fromIntegral align)]
+        I64 -> appendExpr [I64Load8S $ MemArg (fromIntegral offset) (fromIntegral align)]
+        _ -> error "Impossible by type constraint"
+    return Proxy
+
+load16_u :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)
+    => Proxy t
+    -> addr
+    -> offset
+    -> align
+    -> GenFun (Proxy t)
+load16_u t addr offset align = do
+    produce addr
+    case getValueType t of
+        I32 -> appendExpr [I32Load16U $ MemArg (fromIntegral offset) (fromIntegral align)]
+        I64 -> appendExpr [I64Load16U $ MemArg (fromIntegral offset) (fromIntegral align)]
+        _ -> error "Impossible by type constraint"
+    return Proxy
+
+load16_s :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)
+    => Proxy t
+    -> addr
+    -> offset
+    -> align
+    -> GenFun (Proxy t)
+load16_s t addr offset align = do
+    produce addr
+    case getValueType t of
+        I32 -> appendExpr [I32Load16S $ MemArg (fromIntegral offset) (fromIntegral align)]
+        I64 -> appendExpr [I64Load16S $ MemArg (fromIntegral offset) (fromIntegral align)]
+        _ -> error "Impossible by type constraint"
+    return Proxy
+
+load32_u :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)
+    => Proxy t
+    -> addr
+    -> offset
+    -> align
+    -> GenFun (Proxy t)
+load32_u t addr offset align = do
+    produce addr
+    appendExpr [I64Load32U $ MemArg (fromIntegral offset) (fromIntegral align)]
+    return Proxy
+
+load32_s :: (ValueTypeable t, IsInt (Proxy t) ~ True, Producer addr, OutType addr ~ Proxy I32, Integral offset, Integral align)
+    => Proxy t
+    -> addr
+    -> offset
+    -> align
+    -> GenFun (Proxy t)
+load32_s t addr offset align = do
+    produce addr
+    appendExpr [I64Load32S $ MemArg (fromIntegral offset) (fromIntegral align)]
+    return Proxy
+
+store :: (Producer addr, OutType addr ~ Proxy I32, Producer val, Integral offset, Integral align)
+    => addr
+    -> val
+    -> offset
+    -> align
+    -> GenFun ()
+store addr val offset align = do
+    produce addr
+    produce val
+    case asValueType val of
+        I32 -> appendExpr [I32Store $ MemArg (fromIntegral offset) (fromIntegral align)]
+        I64 -> appendExpr [I64Store $ MemArg (fromIntegral offset) (fromIntegral align)]
+        F32 -> appendExpr [F32Store $ MemArg (fromIntegral offset) (fromIntegral align)]
+        F64 -> appendExpr [F64Store $ MemArg (fromIntegral offset) (fromIntegral align)]
+
+store8 :: (Producer addr, OutType addr ~ Proxy I32, Producer val, IsInt (OutType val) ~ True, Integral offset, Integral align)
+    => addr
+    -> val
+    -> offset
+    -> align
+    -> GenFun ()
+store8 addr val offset align = do
+    produce addr
+    produce val
+    case asValueType val of
+        I32 -> appendExpr [I32Store8 $ MemArg (fromIntegral offset) (fromIntegral align)]
+        I64 -> appendExpr [I64Store8 $ MemArg (fromIntegral offset) (fromIntegral align)]
+        _ -> error "Impossible by type constraint"
+
+store16 :: (Producer addr, OutType addr ~ Proxy I32, Producer val, IsInt (OutType val) ~ True, Integral offset, Integral align)
+    => addr
+    -> val
+    -> offset
+    -> align
+    -> GenFun ()
+store16 addr val offset align = do
+    produce addr
+    produce val
+    case asValueType val of
+        I32 -> appendExpr [I32Store16 $ MemArg (fromIntegral offset) (fromIntegral align)]
+        I64 -> appendExpr [I64Store16 $ MemArg (fromIntegral offset) (fromIntegral align)]
+        _ -> error "Impossible by type constraint"
+
+store32 :: (Producer addr, OutType addr ~ Proxy I32, Producer val, OutType val ~ Proxy I64, Integral offset, Integral align)
+    => addr
+    -> val
+    -> offset
+    -> align
+    -> GenFun ()
+store32 addr val offset align = do
+    produce addr
+    produce val
+    appendExpr [I64Store32 $ MemArg (fromIntegral offset) (fromIntegral align)]
+
+memorySize :: GenFun (Proxy I32)
+memorySize = appendExpr [CurrentMemory] >> return Proxy
+
+growMemory :: (Producer size, OutType size ~ Proxy I32) => size -> GenFun ()
+growMemory size = produce size >> appendExpr [GrowMemory]
+
+call :: (Returnable res) => Fn res -> [GenFun a] -> GenFun res
+call (Fn idx) args = sequence_ args >> appendExpr [Call idx] >> return returnableValue
+
+callIndirect :: (Producer index, OutType index ~ Proxy I32, Returnable res) => TypeDef res -> index -> [GenFun a] -> GenFun res
+callIndirect (TypeDef idx) index args = do
+    sequence_ args
+    produce index
+    appendExpr [CallIndirect idx]
+    return returnableValue
+
+br :: Label t -> GenFun ()
+br (Label labelDeep) = do
+    deep <- ask
+    appendExpr [Br $ deep - labelDeep]
+
+brIf :: (Producer pred, OutType pred ~ Proxy I32) => pred -> Label t -> GenFun ()
+brIf pred (Label labelDeep) = do
+    produce pred
+    deep <- ask
+    appendExpr [BrIf $ deep - labelDeep]
+
+brTable :: (Producer selector, OutType selector ~ Proxy I32) => selector -> [Label t] -> Label t -> GenFun ()
+brTable selector labels (Label labelDeep) = do
+    produce selector
+    deep <- ask
+    appendExpr [BrTable (map (\(Label d) -> deep - d) labels) $ deep - labelDeep]
+
+finish :: (Producer val) => val -> GenFun ()
+finish val = do
+    produce val
+    appendExpr [Return]
+
+newtype Label i = Label Natural deriving (Show, Eq)
+
+when :: (Producer pred, OutType pred ~ Proxy I32)
+    => pred
+    -> GenFun ()
+    -> GenFun ()
+when pred body = if' () pred body (return ())
+
+for :: (Producer pred, OutType pred ~ Proxy I32) => GenFun () -> pred -> GenFun () -> GenFun () -> GenFun ()
+for initer pred after body = do
+    initer
+    let loopBody = do
+            body
+            after
+            loopLabel <- label
+            if' () pred (br loopLabel) (return ())
+    if' () pred (loop () loopBody) (return ())
+
+while :: (Producer pred, OutType pred ~ Proxy I32) => pred -> GenFun () -> GenFun ()
+while pred body = do
+    let loopBody = do
+            body
+            loopLabel <- label
+            if' () pred (br loopLabel) (return ())
+    if' () pred (loop () loopBody) (return ())
+
+label :: GenFun (Label t)
+label = Label <$> ask
+
+if' :: (Producer pred, OutType pred ~ Proxy I32, Returnable res)
+    => res
+    -> pred
+    -> GenFun res
+    -> GenFun res
+    -> GenFun res
+if' res pred true false = do
+    produce pred
+    deep <- (+1) <$> ask
+    appendExpr [If (asResultValue res) (genExpr deep $ true) (genExpr deep $ false)]
+    return returnableValue
+
+loop :: (Returnable res) => res -> GenFun res -> GenFun res
+loop res body = do
+    deep <- (+1) <$> ask
+    appendExpr [Loop (asResultValue res) (genExpr deep $ body)]
+    return returnableValue
+
+block :: (Returnable res) => res -> GenFun res -> GenFun res
+block res body = do
+    deep <- (+1) <$> ask
+    appendExpr [Block (asResultValue res) (genExpr deep $ body)]
+    return returnableValue
+
+trap :: Proxy t -> GenFun (Proxy t)
+trap t = do
+    appendExpr [Unreachable]
+    return t
+
+unreachable :: GenFun ()
+unreachable = appendExpr [Unreachable]
+
+class Consumer loc where
+    infixr 2 .=
+    (.=) :: (Producer expr) => loc -> expr -> GenFun ()
+
+instance Consumer (Loc t) where
+    (.=) (Loc i) expr = produce expr >> appendExpr [SetLocal i]
+
+instance Consumer (Glob t) where
+    (.=) (Glob i) expr = produce expr >> appendExpr [SetGlobal i]
+
+newtype TypeDef t = TypeDef Natural deriving (Show, Eq)
+
+typedef :: (Returnable res) => res -> [ValueType] -> GenMod (TypeDef res)
+typedef res args = do
+    let t = FuncType args (asResultValue res)
+    st@GenModState { target = m@Module { types } } <- get
+    let (idx, inserted) = Maybe.fromMaybe (length types, types ++ [t]) $ (\i -> (i, types)) <$> List.findIndex (== t) types
+    put $ st { target = m { types = inserted } }
+    return $ TypeDef $ fromIntegral idx
+
+newtype Fn a = Fn Natural deriving (Show, Eq)
+
+class Returnable a where
+    asResultValue :: a -> [ValueType]
+    returnableValue :: a
+
+instance (ValueTypeable t) => Returnable (Proxy t) where
+    asResultValue t = [getValueType t]
+    returnableValue = Proxy
+
+instance Returnable () where
+    asResultValue _ = []
+    returnableValue = ()
+
+funRec :: (Returnable res) => res -> (Fn res -> GenFun res) -> GenMod (Fn res)
+funRec res generator = do
+    st@GenModState { target = m@Module { types, functions }, funcIdx } <- get
+    let FuncDef { args, locals, instrs } = execState (runReaderT (generator (Fn funcIdx)) 0) $ FuncDef [] [] [] []
+    let t = FuncType args (asResultValue res)
+    let (idx, inserted) = Maybe.fromMaybe (length types, types ++ [t]) $ (\i -> (i, types)) <$> List.findIndex (== t) types
+    put $ st {
+        target = m { functions = functions ++ [Function (fromIntegral idx) locals instrs], types = inserted },
+        funcIdx = funcIdx + 1
+    }
+    return $ Fn funcIdx
+
+fun :: (Returnable res) => res -> GenFun res -> GenMod (Fn res)
+fun res = funRec res . const
+
+declare :: (Returnable res) => res -> [ValueType] -> GenMod (Fn res)
+declare res args = do
+    st@GenModState { target = m@Module { types, functions }, funcIdx } <- get
+    let t = FuncType args (asResultValue res)
+    let (idx, inserted) = Maybe.fromMaybe (length types, types ++ [t]) $ (\i -> (i, types)) <$> List.findIndex (== t) types
+    let err = error "Declared function doesn't have implementation"
+    put $ st {
+        target = m { functions = functions ++ [Function (fromIntegral idx) err err], types = inserted },
+        funcIdx = funcIdx + 1
+    }
+    return $ Fn funcIdx
+
+implement :: (Returnable res) => Fn res -> GenFun res -> GenMod (Fn res)
+implement (Fn funcIdx) generator = do
+    st@GenModState { target = m@Module { types, functions, imports } } <- get
+    let FuncDef { args, locals, instrs } = execState (runReaderT generator 0) $ FuncDef [] [] [] []
+    let locIdx = fromIntegral funcIdx - (length $ filter isFuncImport imports)
+    let (l, inst : r) = splitAt locIdx functions
+    let typeIdx = funcType inst
+    let FuncType ps _ = types !! fromIntegral typeIdx
+    if args /= ps then error "Arguments list in implementation doesn't match with declared type" else return ()
+    put $ st { target = m { functions = l ++ [Function typeIdx locals instrs] ++ r } }
+    return $ Fn funcIdx
+
+nextFuncIndex :: GenMod Natural
+nextFuncIndex = gets funcIdx
+
+data GenModState = GenModState {
+    funcIdx :: Natural,
+    globIdx :: Natural,
+    target :: Module
+} deriving (Show, Eq)
+
+type GenMod = State GenModState
+
+genMod :: GenMod a -> Module
+genMod = target . flip execState (GenModState 0 0 emptyModule)
+
+importFunction :: (Returnable res) => TL.Text -> TL.Text -> res -> [ValueType] -> GenMod (Fn res)
+importFunction mod name res params = do
+    st@GenModState { target = m@Module { types, imports }, funcIdx } <- get
+    let t = FuncType params (asResultValue res)
+    let (idx, inserted) = Maybe.fromMaybe (length types, types ++ [t]) $ (\i -> (i, types)) <$> List.findIndex (== t) types
+    put $ st {
+        target = m { imports = imports ++ [Import mod name $ ImportFunc $ fromIntegral idx], types = inserted },
+        funcIdx = funcIdx + 1
+    }
+    return (Fn funcIdx)
+
+importGlobal :: (ValueTypeable t) => TL.Text -> TL.Text -> Proxy t -> GenMod (Glob t)
+importGlobal mod name t = do
+    st@GenModState { target = m@Module { imports }, globIdx } <- get
+    put $ st {
+        target = m { imports = imports ++ [Import mod name $ ImportGlobal $ Const $ getValueType t] },
+        globIdx = globIdx + 1
+    }
+    return $ Glob globIdx
+
+importMemory :: TL.Text -> TL.Text -> Natural -> Maybe Natural -> GenMod Mem
+importMemory mod name min max = do
+    modify $ \(st@GenModState { target = m }) -> st {
+        target = m { imports = imports m ++ [Import mod name $ ImportMemory $ Limit min max] }
+    }
+    return $ Mem 0
+
+importTable :: TL.Text -> TL.Text -> Natural -> Maybe Natural -> GenMod Tbl
+importTable mod name min max = do
+    modify $ \(st@GenModState { target = m }) -> st {
+        target = m { imports = imports m ++ [Import mod name $ ImportTable $ TableType (Limit min max) AnyFunc] }
+    }
+    return $ Tbl 0
+
+class Exportable e where
+    type AfterExport e
+    export :: TL.Text -> e -> GenMod (AfterExport e)
+
+instance (Exportable e) => Exportable (GenMod e) where
+    type AfterExport (GenMod e) = AfterExport e
+    export name def = do
+        ent <- def
+        export name ent
+
+instance Exportable (Fn t) where
+    type AfterExport (Fn t) = Fn t
+    export name (Fn funIdx) = do
+        modify $ \(st@GenModState { target = m }) -> st {
+            target = m { exports = exports m ++ [Export name $ ExportFunc funIdx] }
+        }
+        return (Fn funIdx)
+
+instance Exportable (Glob t) where
+    type AfterExport (Glob t) = Glob t
+    export name g@(Glob idx) = do
+        modify $ \(st@GenModState { target = m }) -> st {
+            target = m { exports = exports m ++ [Export name $ ExportGlobal idx] }
+        }
+        return g
+
+instance Exportable Mem where
+    type AfterExport Mem = Mem
+    export name (Mem memIdx) = do
+        modify $ \(st@GenModState { target = m }) -> st {
+            target = m { exports = exports m ++ [Export name $ ExportMemory memIdx] }
+        }
+        return (Mem memIdx)
+
+instance Exportable Tbl where
+    type AfterExport Tbl = Tbl
+    export name (Tbl tableIdx) = do
+        modify $ \(st@GenModState { target = m }) -> st {
+            target = m { exports = exports m ++ [Export name $ ExportTable tableIdx] }
+        }
+        return (Tbl tableIdx)
+
+class ValueTypeable a where
+    type ValType a
+    getValueType :: (Proxy a) -> ValueType
+    initWith :: (Proxy a) -> (ValType a) -> Expression
+
+instance ValueTypeable I32 where
+    type ValType I32 = Word32
+    getValueType _ = I32
+    initWith _ w = [I32Const w]
+
+instance ValueTypeable I64 where
+    type ValType I64 = Word64
+    getValueType _ = I64
+    initWith _ w = [I64Const w]
+
+instance ValueTypeable F32 where
+    type ValType F32 = Float
+    getValueType _ = F32
+    initWith _ f = [F32Const f]
+
+instance ValueTypeable F64 where
+    type ValType F64 = Double
+    getValueType _ = F64
+    initWith _ d = [F64Const d]
+
+i32 = Proxy @I32
+i64 = Proxy @I64
+f32 = Proxy @F32
+f64 = Proxy @F64
+
+newtype Glob t = Glob Natural deriving (Show, Eq)
+
+global :: (ValueTypeable t) => (ValueType -> GlobalType) -> Proxy t -> (ValType t) -> GenMod (Glob t)
+global mkType t val = do
+    idx <- gets globIdx
+    modify $ \(st@GenModState { target = m }) -> st {
+        target = m { globals = globals m ++ [Global (mkType $ getValueType t) (initWith t val)] },
+        globIdx = idx + 1
+    }
+    return $ Glob idx
+
+setGlobalInitializer :: forall t . (ValueTypeable t) => Glob t -> (ValType t) -> GenMod ()
+setGlobalInitializer (Glob idx) val = do
+    modify $ \(st@GenModState { target = m }) ->
+        let globImpsLen = length $ filter isGlobalImport $ imports m in
+        let (h, glob:t) = splitAt (fromIntegral idx - globImpsLen) $ globals m in
+        st {
+            target = m { globals = h ++ [glob { initializer = initWith (Proxy @t) val }] ++ t }
+        }
+
+newtype Mem = Mem Natural deriving (Show, Eq)
+
+memory :: Natural -> Maybe Natural -> GenMod Mem
+memory min max = do
+    modify $ \(st@GenModState { target = m }) -> st {
+        target = m { mems = mems m ++ [Memory $ Limit min max] }
+    }
+    return $ Mem 0
+
+newtype Tbl = Tbl Natural deriving (Show, Eq)
+
+table :: Natural -> Maybe Natural -> GenMod Tbl
+table min max = do
+    modify $ \(st@GenModState { target = m }) -> st {
+        target = m { tables = tables m ++ [Table $ TableType (Limit min max) AnyFunc] }
+    }
+    return $ Tbl 0
+
+dataSegment :: (Producer offset, OutType offset ~ Proxy I32) => offset -> LBS.ByteString -> GenMod ()
+dataSegment offset bytes =
+    modify $ \(st@GenModState { target = m }) -> st {
+        target = m { datas = datas m ++ [DataSegment 0 (genExpr 0 (produce offset)) bytes] }
+    }
+
+asWord32 :: Int32 -> Word32
+asWord32 i
+    | i >= 0 = fromIntegral i
+    | otherwise = 0xFFFFFFFF - (fromIntegral (abs i)) + 1
+
+asWord64 :: Int64 -> Word64
+asWord64 i
+    | i >= 0 = fromIntegral i
+    | otherwise = 0xFFFFFFFFFFFFFFFF - (fromIntegral (abs i)) + 1
+
+rts :: Module
+rts = genMod $ do
+    gc <- importFunction "rts" "gc" () [I32]
+    memory 10 Nothing
+
+    stackStart <- global Const i32 0
+    stackEnd <- global Const i32 0
+    stackBase <- global Mut i32 0
+    stackTop <- global Mut i32 0
+
+    retReg <- global Mut i32 0
+    tmpReg <- global Mut i32 0
+
+    heapStart <- global Mut i32 0
+    heapNext <- global Mut i32 0
+    heapEnd <- global Mut i32 0
+
+    aligned <- fun i32 $ do
+        size <- param i32
+        (size `add` i32c 3) `and` i32c 0xFFFFFFFC
+    alloc <- funRec i32 $ \self -> do
+        size <- param i32
+        alignedSize <- local i32
+        addr <- local i32
+        alignedSize .= call aligned [arg size]
+        if' i32 ((heapNext `add` alignedSize) `lt_u` heapEnd)
+            (do
+                addr .= heapNext
+                heapNext .= heapNext `add` alignedSize
+                ret addr
+            )
+            (do
+                call gc []
+                call self [arg size]
+            )
+    return ()
diff --git a/src/Language/Wasm/FloatUtils.hs b/src/Language/Wasm/FloatUtils.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/FloatUtils.hs
@@ -0,0 +1,44 @@
+{-# LANGUAGE FlexibleContexts #-}
+
+module Language.Wasm.FloatUtils (
+    wordToFloat,
+    floatToWord,
+    wordToDouble,
+    doubleToWord,
+    makeNaN,
+    doubleToFloat
+) where
+
+import Data.Word (Word32, Word64)
+import Data.Bits ((.|.), (.&.), shiftR)
+import Data.Array.ST (newArray, readArray, MArray, STUArray)
+import Data.Array.Unsafe (castSTUArray)
+import GHC.ST (runST, ST)
+
+-- brough from https://stackoverflow.com/questions/6976684/converting-ieee-754-floating-point-in-haskell-word32-64-to-and-from-haskell-floa
+wordToFloat :: Word32 -> Float
+wordToFloat x = runST (cast x)
+
+floatToWord :: Float -> Word32
+floatToWord x = runST (cast x)
+
+wordToDouble :: Word64 -> Double
+wordToDouble x = runST (cast x)
+
+doubleToWord :: Double -> Word64
+doubleToWord x = runST (cast x)
+
+{-# INLINE cast #-}
+cast :: (MArray (STUArray s) a (ST s),
+         MArray (STUArray s) b (ST s)) => a -> ST s b
+cast x = newArray (0 :: Int, 0) x >>= castSTUArray >>= flip readArray 0
+
+makeNaN :: Word64 -> Double
+makeNaN w = wordToDouble $ 0x7FF0000000000000 .|. (0x000FFFFFFFFFFFFF .&. w)
+
+doubleToFloat :: Double -> Float
+doubleToFloat d =
+    let w = doubleToWord d in
+    if 0x7FF0000000000000 == (w .&. 0x7FF0000000000000) && (w .&. 0x0007FFFFFFFFFFFF) /= 0
+    then wordToFloat $ fromIntegral $ ((0x8000000000000000 .&. w) `shiftR` 32) .|. 0x7F800000 .|. (0x7FFFFF .&. w)
+    else realToFrac d
diff --git a/src/Language/Wasm/Interpreter.hs b/src/Language/Wasm/Interpreter.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/Interpreter.hs
@@ -0,0 +1,1109 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE TypeFamilies #-}
+
+module Language.Wasm.Interpreter (
+    Value(..),
+    Store,
+    ModuleInstance(..),
+    ExternalValue(..),
+    ExportInstance(..),
+    GlobalInstance(..),
+    Imports,
+    HostItem(..),
+    instantiate,
+    invoke,
+    invokeExport,
+    getGlobalValueByName,
+    emptyStore,
+    emptyImports,
+    makeHostModule,
+    makeMutGlobal
+) where
+
+import qualified Data.Map as Map
+import qualified Data.Text.Lazy as TL
+import qualified Data.ByteString.Lazy as LBS
+import Data.Maybe (fromMaybe, isNothing)
+
+import Data.Vector (Vector, (!), (!?), (//))
+import Data.Vector.Storable.Mutable (IOVector)
+import qualified Data.Vector as Vector
+import qualified Data.Vector.Storable.Mutable as IOVector
+import Data.IORef (IORef, newIORef, readIORef, writeIORef)
+import Data.Word (Word8, Word16, Word32, Word64)
+import Data.Int (Int32, Int64)
+import Numeric.Natural (Natural)
+import qualified Control.Monad as Monad
+import Data.Monoid ((<>))
+import Data.Bits (
+        Bits,
+        (.|.),
+        (.&.),
+        xor,
+        shiftL,
+        shiftR,
+        rotateL,
+        rotateR,
+        popCount,
+        countLeadingZeros,
+        countTrailingZeros
+    )
+import Numeric.IEEE (IEEE, copySign, minNum, maxNum, identicalIEEE)
+import Control.Monad.Except (ExceptT, runExceptT, throwError)
+import Control.Monad.IO.Class (liftIO)
+
+import Language.Wasm.Structure as Struct
+import Language.Wasm.Validate as Valid
+import Language.Wasm.FloatUtils (
+        wordToFloat,
+        floatToWord,
+        wordToDouble,
+        doubleToWord
+    )
+
+data Value =
+    VI32 Word32
+    | VI64 Word64
+    | VF32 Float
+    | VF64 Double
+    deriving (Eq, Show)
+
+asInt32 :: Word32 -> Int32
+asInt32 w =
+    if w < 0x80000000
+    then fromIntegral w
+    else -1 * fromIntegral (0xFFFFFFFF - w + 1)
+
+asInt64 :: Word64 -> Int64
+asInt64 w =
+    if w < 0x8000000000000000
+    then fromIntegral w
+    else -1 * fromIntegral (0xFFFFFFFFFFFFFFFF - w + 1)
+
+asWord32 :: Int32 -> Word32
+asWord32 i
+    | i >= 0 = fromIntegral i
+    | otherwise = 0xFFFFFFFF - (fromIntegral (abs i)) + 1
+
+asWord64 :: Int64 -> Word64
+asWord64 i
+    | i >= 0 = fromIntegral i
+    | otherwise = 0xFFFFFFFFFFFFFFFF - (fromIntegral (abs i)) + 1
+
+nearest :: (IEEE a) => a -> a
+nearest f
+    | isNaN f = f
+    | f >= 0 && f <= 0.5 = copySign 0 f
+    | f < 0 && f >= -0.5 = -0
+    | otherwise =
+        let i = floor f :: Integer in
+        let fi = fromIntegral i in
+        let r = abs f - abs fi in
+        flip copySign f $ (
+            if r == 0.5
+            then (
+                case (even i, f < 0) of
+                    (True, _) -> fi
+                    (_, True) -> fi - 1.0
+                    (_, False) -> fi + 1.0
+            )
+            else fromIntegral (round f :: Integer)
+        )
+
+zeroAwareMin :: IEEE a => a -> a -> a
+zeroAwareMin a b
+    | identicalIEEE a 0 && identicalIEEE b (-0) = b
+    | isNaN a = a
+    | isNaN b = b
+    | otherwise = minNum a b
+
+zeroAwareMax :: IEEE a => a -> a -> a
+zeroAwareMax a b
+    | identicalIEEE a (-0) && identicalIEEE b 0 = b
+    | isNaN a = a
+    | isNaN b = b
+    | otherwise = maxNum a b
+
+floatFloor :: Float -> Float
+floatFloor a
+    | isNaN a = a
+    | otherwise = copySign (fromIntegral (floor a :: Integer)) a
+
+doubleFloor :: Double -> Double
+doubleFloor a
+    | isNaN a = a
+    | otherwise = copySign (fromIntegral (floor a :: Integer)) a
+
+floatCeil :: Float -> Float
+floatCeil a
+    | isNaN a = a
+    | otherwise = copySign (fromIntegral (ceiling a :: Integer)) a
+
+doubleCeil :: Double -> Double
+doubleCeil a
+    | isNaN a = a
+    | otherwise = copySign (fromIntegral (ceiling a :: Integer)) a
+
+floatTrunc :: Float -> Float
+floatTrunc a
+    | isNaN a = a
+    | otherwise = copySign (fromIntegral (truncate a :: Integer)) a
+
+doubleTrunc :: Double -> Double
+doubleTrunc a
+    | isNaN a = a
+    | otherwise = copySign (fromIntegral (truncate a :: Integer)) a
+
+data Label = Label ResultType deriving (Show, Eq)
+
+type Address = Int
+
+data TableInstance = TableInstance {
+    lim :: Limit,
+    elements :: Vector (Maybe Address)
+}
+
+data MemoryInstance = MemoryInstance {
+    lim :: Limit,
+    memory :: IORef (IOVector Word8)
+}
+
+data GlobalInstance = GIConst ValueType Value | GIMut ValueType (IORef Value)
+
+makeMutGlobal :: Value -> IO GlobalInstance
+makeMutGlobal val = GIMut (getValueType val) <$> newIORef val
+
+getValueType :: Value -> ValueType
+getValueType (VI32 _) = I32
+getValueType (VI64 _) = I64
+getValueType (VF32 _) = F32
+getValueType (VF64 _) = F64
+
+data ExportInstance = ExportInstance TL.Text ExternalValue deriving (Eq, Show)
+
+data ExternalValue =
+    ExternFunction Address
+    | ExternTable Address
+    | ExternMemory Address
+    | ExternGlobal Address
+    deriving (Eq, Show)
+
+data FunctionInstance =
+    FunctionInstance {
+        funcType :: FuncType,
+        moduleInstance :: ModuleInstance,
+        code :: Function
+    }
+    | HostInstance {
+        funcType :: FuncType,
+        hostCode :: HostFunction
+    }
+
+data Store = Store {
+    funcInstances :: Vector FunctionInstance,
+    tableInstances :: Vector TableInstance,
+    memInstances :: Vector MemoryInstance,
+    globalInstances :: Vector GlobalInstance
+}
+
+emptyStore :: Store
+emptyStore = Store {
+    funcInstances = Vector.empty,
+    tableInstances = Vector.empty,
+    memInstances = Vector.empty,
+    globalInstances = Vector.empty
+}
+
+type HostFunction = [Value] -> IO [Value]
+
+data HostItem
+    = HostFunction FuncType HostFunction
+    | HostGlobal GlobalInstance
+    | HostMemory Limit
+    | HostTable Limit
+
+makeHostModule :: Store -> [(TL.Text, HostItem)] -> IO (Store, ModuleInstance)
+makeHostModule st items = do
+    (st, emptyModInstance)
+        |> makeHostFunctions
+        |> makeHostGlobals
+        |> makeHostMems
+        >>= makeHostTables
+    where
+        (|>) = flip ($)
+
+        isHostFunction :: (TL.Text, HostItem) -> Bool
+        isHostFunction (_, (HostFunction _ _)) = True
+        isHostFunction _ = False
+
+        makeHostFunctions :: (Store, ModuleInstance) -> (Store, ModuleInstance)
+        makeHostFunctions (st, inst) =
+            let funcLen = Vector.length $ funcInstances st in
+            let hostFunctions = filter isHostFunction items in
+            let instances = map (\(_, (HostFunction t c)) -> HostInstance t c) hostFunctions in
+            let types = map (\(_, (HostFunction t _)) -> t) hostFunctions in
+            let exps = Vector.fromList $ zipWith (\(name, _) i -> ExportInstance name (ExternFunction i)) hostFunctions [funcLen..] in
+            let inst' = inst {
+                    funcTypes = Vector.fromList types,
+                    funcaddrs = Vector.fromList [funcLen..funcLen + length instances - 1],
+                    exports = Language.Wasm.Interpreter.exports inst <> exps
+                }
+            in
+            let st' = st { funcInstances = funcInstances st <> Vector.fromList instances } in
+            (st', inst')
+
+        isHostGlobal :: (TL.Text, HostItem) -> Bool
+        isHostGlobal (_, (HostGlobal _)) = True
+        isHostGlobal _ = False
+        
+        makeHostGlobals :: (Store, ModuleInstance) -> (Store, ModuleInstance)
+        makeHostGlobals (st, inst) =
+            let globLen = Vector.length $ globalInstances st in
+            let hostGlobals = filter isHostGlobal items in
+            let instances = map (\(_, (HostGlobal g)) -> g) hostGlobals in
+            let exps = Vector.fromList $ zipWith (\(name, _) i -> ExportInstance name (ExternGlobal i)) hostGlobals [globLen..] in
+            let inst' = inst {
+                    globaladdrs = Vector.fromList [globLen..globLen + length instances - 1],
+                    exports = Language.Wasm.Interpreter.exports inst <> exps
+                }
+            in
+            let st' = st { globalInstances = globalInstances st <> Vector.fromList instances } in
+            (st', inst')
+
+        isHostMem :: (TL.Text, HostItem) -> Bool
+        isHostMem (_, (HostMemory _)) = True
+        isHostMem _ = False
+            
+        makeHostMems :: (Store, ModuleInstance) -> IO (Store, ModuleInstance)
+        makeHostMems (st, inst) = do
+            let memLen = Vector.length $ memInstances st
+            let hostMems = filter isHostMem items
+            instances <- allocMems $ map (\(_, (HostMemory lim)) -> Memory lim) hostMems
+            let exps = Vector.fromList $ zipWith (\(name, _) i -> ExportInstance name (ExternMemory i)) hostMems [memLen..]
+            let inst' = inst {
+                    memaddrs = Vector.fromList [memLen..memLen + length instances - 1],
+                    exports = Language.Wasm.Interpreter.exports inst <> exps
+                }
+            let st' = st { memInstances = memInstances st <> instances }
+            return (st', inst')
+
+        isHostTable :: (TL.Text, HostItem) -> Bool
+        isHostTable (_, (HostTable _)) = True
+        isHostTable _ = False
+            
+        makeHostTables :: (Store, ModuleInstance) -> IO (Store, ModuleInstance)
+        makeHostTables (st, inst) = do
+            let tableLen = Vector.length $ tableInstances st
+            let hostTables = filter isHostTable items
+            let instances = allocTables $ map (\(_, (HostTable lim)) -> Table (TableType lim AnyFunc)) hostTables
+            let exps = Vector.fromList $ zipWith (\(name, _) i -> ExportInstance name (ExternTable i)) hostTables [tableLen..]
+            let inst' = inst {
+                    tableaddrs = Vector.fromList [tableLen..tableLen + length instances - 1],
+                    exports = Language.Wasm.Interpreter.exports inst <> exps
+                }
+            let st' = st { tableInstances = tableInstances st <> instances }
+            return (st', inst')
+
+data ModuleInstance = ModuleInstance {
+    funcTypes :: Vector FuncType,
+    funcaddrs :: Vector Address,
+    tableaddrs :: Vector Address,
+    memaddrs :: Vector Address,
+    globaladdrs :: Vector Address,
+    exports :: Vector ExportInstance
+} deriving (Eq, Show)
+
+emptyModInstance :: ModuleInstance
+emptyModInstance = ModuleInstance {
+    funcTypes = Vector.empty,
+    funcaddrs = Vector.empty,
+    tableaddrs = Vector.empty,
+    memaddrs = Vector.empty,
+    globaladdrs = Vector.empty,
+    exports = Vector.empty
+}
+
+calcInstance :: Store -> Imports -> Module -> Initialize ModuleInstance
+calcInstance (Store fs ts ms gs) imps Module {functions, types, tables, mems, globals, exports, imports} = do
+    let funLen = length fs
+    let tableLen = length ts
+    let memLen = length ms
+    let globalLen = length gs
+    funImps <- mapM checkImportType $ filter isFuncImport imports
+    tableImps <- mapM checkImportType $ filter isTableImport imports
+    memImps <- mapM checkImportType $ filter isMemImport imports
+    globalImps <- mapM checkImportType $ filter isGlobalImport imports
+    let funs = Vector.fromList $ map (\(ExternFunction i) -> i) funImps ++ [funLen..funLen + length functions - 1]
+    let tbls = Vector.fromList $ map (\(ExternTable i) -> i) tableImps ++ [tableLen..tableLen + length tables - 1]
+    let memories = Vector.fromList $ map (\(ExternMemory i) -> i) memImps ++ [memLen..memLen + length mems - 1]
+    let globs = Vector.fromList $ map (\(ExternGlobal i) -> i) globalImps ++ [globalLen..globalLen + length globals - 1]
+    let
+        refExport (Export name (ExportFunc idx)) =
+            ExportInstance name $ ExternFunction $ funs ! fromIntegral idx
+        refExport (Export name (ExportTable idx)) =
+            ExportInstance name $ ExternTable $ tbls ! fromIntegral idx
+        refExport (Export name (ExportMemory idx)) =
+            ExportInstance name $ ExternMemory $ memories ! fromIntegral idx
+        refExport (Export name (ExportGlobal idx)) =
+            ExportInstance name $ ExternGlobal $ globs ! fromIntegral idx
+    return $ ModuleInstance {
+        funcTypes = Vector.fromList types,
+        funcaddrs = funs,
+        tableaddrs = tbls,
+        memaddrs = memories,
+        globaladdrs = globs,
+        exports = Vector.fromList $ map refExport exports
+    }
+    where
+        getImpIdx :: Import -> Initialize ExternalValue
+        getImpIdx (Import m n _) =
+            case Map.lookup (m, n) imps of
+                Just idx -> return idx
+                Nothing -> throwError $ "Cannot find import from module " ++ show m ++ " with name " ++ show n
+
+        checkImportType :: Import -> Initialize ExternalValue
+        checkImportType imp@(Import _ _ (ImportFunc typeIdx)) = do
+            idx <- getImpIdx imp
+            funcAddr <- case idx of
+                ExternFunction funcAddr -> return funcAddr
+                other -> throwError "incompatible import type"
+            let expectedType = types !! fromIntegral typeIdx
+            let actualType = Language.Wasm.Interpreter.funcType $ fs ! funcAddr
+            if expectedType == actualType
+            then return idx
+            else throwError "incompatible import type"
+        checkImportType imp@(Import _ _ (ImportGlobal globalType)) = do
+            let err = throwError "incompatible import type"
+            idx <- getImpIdx imp
+            globalAddr <- case idx of
+                ExternGlobal globalAddr -> return globalAddr
+                _ -> err
+            let globalInst = gs ! globalAddr
+            let vt = case globalType of
+                    Const vt -> vt
+                    Mut vt -> vt
+            let vt' = case globalInst of
+                    GIConst vt _ -> vt
+                    GIMut vt _ -> vt
+            if vt == vt' then return idx else err
+        checkImportType imp@(Import _ _ (ImportMemory limit)) = do
+            idx <- getImpIdx imp
+            memAddr <- case idx of
+                ExternMemory memAddr -> return memAddr
+                _ -> throwError "incompatible import type"
+            let MemoryInstance { lim } = ms ! memAddr
+            if limitMatch lim limit
+            then return idx
+            else throwError "incompatible import type"
+        checkImportType imp@(Import _ _ (ImportTable (TableType limit _))) = do
+            idx <- getImpIdx imp
+            tableAddr <- case idx of
+                ExternTable tableAddr -> return tableAddr
+                _ -> throwError "incompatible import type"
+            let TableInstance { lim } = ts ! tableAddr
+            if limitMatch lim limit
+            then return idx
+            else throwError "incompatible import type"
+    
+        limitMatch :: Limit -> Limit -> Bool
+        limitMatch (Limit n1 m1) (Limit n2 m2) = n1 >= n2 && (isNothing m2 || fromMaybe False ((<=) <$> m1 <*> m2))
+
+type Imports = Map.Map (TL.Text, TL.Text) ExternalValue
+
+emptyImports :: Imports
+emptyImports = Map.empty
+
+allocFunctions :: ModuleInstance -> [Function] -> Vector FunctionInstance
+allocFunctions inst@ModuleInstance {funcTypes} funs =
+    let mkFuncInst f@Function {funcType} = FunctionInstance (funcTypes ! (fromIntegral funcType)) inst f in
+    Vector.fromList $ map mkFuncInst funs
+
+getGlobalValue :: ModuleInstance -> Store -> Natural -> IO Value
+getGlobalValue inst store idx =
+    let addr = case globaladdrs inst !? fromIntegral idx of
+            Just a -> a
+            Nothing -> error "Global index is out of range. It can happen if initializer refs non-import global."
+    in
+    case globalInstances store ! addr of
+        GIConst _ v -> return v
+        GIMut _ ref -> readIORef ref
+
+-- due the validation there can be only these instructions
+evalConstExpr :: ModuleInstance -> Store -> Expression -> IO Value
+evalConstExpr _ _ [I32Const v] = return $ VI32 v
+evalConstExpr _ _ [I64Const v] = return $ VI64 v
+evalConstExpr _ _ [F32Const v] = return $ VF32 v
+evalConstExpr _ _ [F64Const v] = return $ VF64 v
+evalConstExpr inst store [GetGlobal i] = getGlobalValue inst store i
+evalConstExpr _ _ instrs = error $ "Global initializer contains unsupported instructions: " ++ show instrs
+
+allocAndInitGlobals :: ModuleInstance -> Store -> [Global] -> IO (Vector GlobalInstance)
+allocAndInitGlobals inst store globs = Vector.fromList <$> mapM allocGlob globs
+    where
+        runIniter :: Expression -> IO Value
+        -- the spec says get global can ref only imported globals
+        -- only they are in store for this moment
+        runIniter = evalConstExpr inst store
+
+        allocGlob :: Global -> IO GlobalInstance
+        allocGlob (Global (Const vt) initer) = GIConst vt <$> runIniter initer
+        allocGlob (Global (Mut vt) initer) = do
+            val <- runIniter initer
+            GIMut vt <$> newIORef val
+
+allocTables :: [Table] -> Vector TableInstance
+allocTables tables = Vector.fromList $ map allocTable tables
+    where
+        allocTable :: Table -> TableInstance
+        allocTable (Table (TableType lim@(Limit from to) _)) =
+            TableInstance {
+                lim,
+                elements = Vector.fromList $ replicate (fromIntegral from) Nothing
+            }
+
+defaultBudget :: Natural
+defaultBudget = 300
+
+pageSize :: Int
+pageSize = 64 * 1024
+
+allocMems :: [Memory] -> IO (Vector MemoryInstance)
+allocMems mems = Vector.fromList <$> mapM allocMem mems
+    where
+        allocMem :: Memory -> IO MemoryInstance
+        allocMem (Memory lim@(Limit from to)) = do
+            mem <- IOVector.replicate (fromIntegral from * pageSize) 0
+            memory <- newIORef mem
+            return MemoryInstance {
+                lim,
+                memory
+            }
+
+type Initialize = ExceptT String IO
+
+initialize :: ModuleInstance -> Module -> Store -> Initialize Store
+initialize inst Module {elems, datas, start} store = do
+    checkedMems <- mapM (checkData store) datas
+    checkedTables <- mapM (checkElem store) elems
+    mapM_ initData checkedMems
+    st <- Monad.foldM initElem store checkedTables
+    case start of
+        Just (StartFunction idx) -> do
+            let funInst = funcInstances store ! (funcaddrs inst ! fromIntegral idx)
+            mainRes <- liftIO $ eval defaultBudget st funInst []
+            case mainRes of
+                Just [] -> return st
+                _ -> throwError "Start function terminated with trap"
+        Nothing -> return st
+    where
+        checkElem :: Store -> ElemSegment -> Initialize (Address, Int, [Address])
+        checkElem st ElemSegment {tableIndex, offset, funcIndexes} = do
+            VI32 val <- liftIO $ evalConstExpr inst st offset
+            let from = fromIntegral val
+            let funcs = map ((funcaddrs inst !) . fromIntegral) funcIndexes
+            let idx = tableaddrs inst ! fromIntegral tableIndex
+            let last = from + length funcs
+            let TableInstance lim elems = tableInstances st ! idx
+            let len = Vector.length elems
+            Monad.when (last > len) $ throwError "elements segment does not fit"
+            return (idx, from, funcs)
+
+        initElem :: Store -> (Address, Int, [Address]) -> Initialize Store
+        initElem st (idx, from, funcs) = do
+            let TableInstance lim elems = tableInstances st ! idx
+            let table = TableInstance lim (elems // zip [from..] (map Just funcs))
+            return st { tableInstances = tableInstances st Vector.// [(idx, table)] }
+
+        checkData :: Store -> DataSegment -> Initialize (Int, IOVector Word8, LBS.ByteString)
+        checkData st DataSegment {memIndex, offset, chunk} = do
+            VI32 val <- liftIO $ evalConstExpr inst st offset
+            let from = fromIntegral val
+            let idx = memaddrs inst ! fromIntegral memIndex
+            let last = from + (fromIntegral $ LBS.length chunk)
+            let MemoryInstance _ memory = memInstances st ! idx
+            mem <- liftIO $ readIORef memory
+            let len = IOVector.length mem
+            Monad.when (last > len) $ throwError "data segment does not fit"
+            return (from, mem, chunk)
+        
+        initData :: (Int, IOVector Word8, LBS.ByteString) -> Initialize ()
+        initData (from, mem, chunk) =
+            mapM_ (\(i,b) -> IOVector.write mem i b) $ zip [from..] $ LBS.unpack chunk
+
+instantiate :: Store -> Imports -> Valid.ValidModule -> IO (Either String (ModuleInstance, Store))
+instantiate st imps mod = runExceptT $ do
+    let m = Valid.getModule mod
+    inst <- calcInstance st imps m
+    let functions = funcInstances st <> (allocFunctions inst $ Struct.functions m)
+    globals <- liftIO $ (globalInstances st <>) <$> (allocAndInitGlobals inst st $ Struct.globals m)
+    let tables = tableInstances st <> (allocTables $ Struct.tables m)
+    mems <- liftIO $ (memInstances st <>) <$> (allocMems $ Struct.mems m)
+    st' <- initialize inst m $ st {
+        funcInstances = functions,
+        tableInstances = tables,
+        memInstances = mems,
+        globalInstances = globals
+    }
+    return $ (inst, st')
+
+type Stack = [Value]
+
+data EvalCtx = EvalCtx {
+    locals :: Vector Value,
+    labels :: [Label],
+    stack :: Stack
+} deriving (Show, Eq)
+
+data EvalResult =
+    Done EvalCtx
+    | Break Int [Value] EvalCtx
+    | Trap
+    | ReturnFn [Value]
+    deriving (Show, Eq)
+
+eval :: Natural -> Store -> FunctionInstance -> [Value] -> IO (Maybe [Value])
+eval 0 _ _ _ = return Nothing
+eval budget store FunctionInstance { funcType, moduleInstance, code = Function { localTypes, body} } args = do
+    case sequence $ zipWith checkValType (params funcType) args of
+        Just checkedArgs -> do
+            let initialContext = EvalCtx {
+                    locals = Vector.fromList $ checkedArgs ++ map initLocal localTypes,
+                    labels = [Label $ results funcType],
+                    stack = []
+                }
+            res <- go initialContext body
+            case res of
+                Done ctx -> return $ Just $ reverse $ stack ctx
+                ReturnFn r -> return $ Just r
+                Break 0 r _ -> return $ Just $ reverse r
+                Break _ _ _ -> error "Break is out of range"
+                Trap -> return Nothing
+        Nothing -> return Nothing
+    where
+        checkValType :: ValueType -> Value -> Maybe Value
+        checkValType I32 (VI32 v) = Just $ VI32 v
+        checkValType I64 (VI64 v) = Just $ VI64 v
+        checkValType F32 (VF32 v) = Just $ VF32 v
+        checkValType F64 (VF64 v) = Just $ VF64 v
+        checkValType _   _        = Nothing
+
+        initLocal :: ValueType -> Value
+        initLocal I32 = VI32 0
+        initLocal I64 = VI64 0
+        initLocal F32 = VF32 0
+        initLocal F64 = VF64 0
+
+        go :: EvalCtx -> Expression -> IO EvalResult
+        go ctx [] = return $ Done ctx
+        go ctx (instr:rest) = do
+            res <- step ctx instr
+            case res of
+                Done ctx' -> go ctx' rest
+                command -> return command
+        
+        makeLoadInstr :: (Bits i, Integral i) => EvalCtx -> Natural -> Int -> ([Value] -> i -> EvalResult) -> IO EvalResult
+        makeLoadInstr ctx@EvalCtx{ stack = (VI32 v:rest) } offset byteWidth cont = do
+            let MemoryInstance { memory = memoryRef } = memInstances store ! (memaddrs moduleInstance ! 0)
+            memory <- readIORef memoryRef
+            let addr = fromIntegral v + fromIntegral offset
+            let readByte idx = do
+                    byte <- IOVector.read memory $ addr + idx
+                    return $ fromIntegral byte `shiftL` (idx * 8)
+            if addr + byteWidth > IOVector.length memory
+            then return Trap
+            else cont rest . sum <$> mapM readByte [0..byteWidth-1]
+        makeLoadInstr _ _ _ _ = error "Incorrect value on top of stack for memory instruction"
+
+        makeStoreInstr :: (Bits i, Integral i) => EvalCtx -> Natural -> Int -> i -> IO EvalResult
+        makeStoreInstr ctx@EvalCtx{ stack = (VI32 va:rest) } offset byteWidth v = do
+            let MemoryInstance { memory = memoryRef } = memInstances store ! (memaddrs moduleInstance ! 0)
+            memory <- readIORef memoryRef
+            let addr = fromIntegral $ va + fromIntegral offset
+            let writeByte idx = do
+                    let byte = fromIntegral $ v `shiftR` (idx * 8) .&. 0xFF
+                    IOVector.write memory (addr + idx) byte
+            if addr + byteWidth > IOVector.length memory
+            then return Trap
+            else do
+                mapM_ writeByte [0..byteWidth-1]
+                return $ Done ctx { stack = rest }
+        makeStoreInstr _ _ _ _ = error "Incorrect value on top of stack for memory instruction"
+
+        step :: EvalCtx -> Instruction Natural -> IO EvalResult
+        step _ Unreachable = return Trap
+        step ctx Nop = return $ Done ctx
+        step ctx (Block resType expr) = do
+            res <- go ctx { labels = Label resType : labels ctx } expr
+            case res of
+                Break 0 r EvalCtx{ locals = ls } -> return $ Done ctx { locals = ls, stack = r ++ stack ctx }
+                Break n r ctx' -> return $ Break (n - 1) r ctx'
+                Done ctx'@EvalCtx{ labels = (_:rest) } -> return $ Done ctx' { labels = rest }
+                command -> return command
+        step ctx loop@(Loop resType expr) = do
+            res <- go ctx { labels = Label resType : labels ctx } expr
+            case res of
+                Break 0 r EvalCtx{ locals = ls } -> step ctx { locals = ls, stack = r ++ stack ctx } loop
+                Break n r ctx' -> return $ Break (n - 1) r ctx'
+                Done ctx'@EvalCtx{ labels = (_:rest) } -> return $ Done ctx' { labels = rest }
+                command -> return command
+        step ctx@EvalCtx{ stack = (VI32 v): rest } (If resType true false) = do
+            let expr = if v /= 0 then true else false
+            res <- go ctx { labels = Label resType : labels ctx, stack = rest } expr
+            case res of
+                Break 0 r EvalCtx{ locals = ls } -> return $ Done ctx { locals = ls, stack = r ++ rest }
+                Break n r ctx' -> return $ Break (n - 1) r ctx'
+                Done ctx'@EvalCtx{ labels = (_:rest) } -> return $ Done ctx' { labels = rest }
+                command -> return command
+        step ctx@EvalCtx{ stack, labels } (Br label) = do
+            let idx = fromIntegral label
+            let Label resType = labels !! idx
+            case sequence $ zipWith checkValType resType $ take (length resType) stack of
+                Just result -> return $ Break idx result ctx
+                Nothing -> return Trap
+        step ctx@EvalCtx{ stack = (VI32 v): rest } (BrIf label) =
+            if v == 0
+            then return $ Done ctx { stack = rest }
+            else step ctx { stack = rest } (Br label)
+        step ctx@EvalCtx{ stack = (VI32 v): rest } (BrTable labels label) =
+            let idx = fromIntegral v in
+            let lbl = fromIntegral $ if idx < length labels then labels !! idx else label in
+            step ctx { stack = rest } (Br lbl)
+        step EvalCtx{ stack } Return =
+            let resType = results funcType in
+            case sequence $ zipWith checkValType resType $ take (length resType) stack of
+                Just result -> return $ ReturnFn $ reverse result
+                Nothing -> return Trap
+        step ctx (Call fun) = do
+            let funInst = funcInstances store ! (funcaddrs moduleInstance ! fromIntegral fun)
+            let ft = Language.Wasm.Interpreter.funcType funInst 
+            let args = params ft
+            case sequence $ zipWith checkValType args $ reverse $ take (length args) $ stack ctx of
+                Just params -> do
+                    res <- eval (budget - 1) store funInst params
+                    case res of
+                        Just res -> return $ Done ctx { stack = reverse res ++ (drop (length args) $ stack ctx) }
+                        Nothing -> return Trap
+                Nothing -> return Trap
+        step ctx@EvalCtx{ stack = (VI32 v): rest } (CallIndirect typeIdx) = do
+            let funcType = funcTypes moduleInstance ! fromIntegral typeIdx
+            let TableInstance { elements } = tableInstances store ! (tableaddrs moduleInstance ! 0)
+            let checks = do
+                    addr <- Monad.join $ elements !? fromIntegral v
+                    let funcInst = funcInstances store ! addr
+                    let targetType = Language.Wasm.Interpreter.funcType funcInst
+                    Monad.guard $ targetType == funcType
+                    let args = params targetType
+                    Monad.guard $ length args <= length rest
+                    params <- sequence $ zipWith checkValType args $ reverse $ take (length args) rest
+                    return (funcInst, params)
+            case checks of
+                Just (funcInst, params) -> do
+                    res <- eval (budget - 1) store funcInst params
+                    case res of
+                        Just res -> return $ Done ctx { stack = reverse res ++ (drop (length params) rest) }
+                        Nothing -> return Trap
+                Nothing -> return Trap
+        step ctx@EvalCtx{ stack = (_:rest) } Drop = return $ Done ctx { stack = rest }
+        step ctx@EvalCtx{ stack = (VI32 test:val2:val1:rest) } Select =
+            if test == 0
+            then return $ Done ctx { stack = val2 : rest }
+            else return $ Done ctx { stack = val1 : rest }
+        step ctx (GetLocal i) = return $ Done ctx { stack = (locals ctx ! fromIntegral i) : stack ctx }
+        step ctx@EvalCtx{ stack = (v:rest) } (SetLocal i) =
+            return $ Done ctx { stack = rest, locals = locals ctx // [(fromIntegral i, v)] }
+        step ctx@EvalCtx{ locals = ls, stack = (v:rest) } (TeeLocal i) =
+            return $ Done ctx {
+                stack = v : rest,
+                locals = locals ctx // [(fromIntegral i, v)]
+            }
+        step ctx (GetGlobal i) = do
+            let globalInst = globalInstances store ! (globaladdrs moduleInstance ! fromIntegral i)
+            val <- case globalInst of
+                GIConst _ v -> return v
+                GIMut _ ref -> readIORef ref
+            return $ Done ctx { stack = val : stack ctx }
+        step ctx@EvalCtx{ stack = (v:rest) } (SetGlobal i) = do
+            let globalInst = globalInstances store ! (globaladdrs moduleInstance ! fromIntegral i)
+            case globalInst of
+                GIConst _ v -> error "Attempt of mutation of constant global"
+                GIMut _ ref -> writeIORef ref v
+            return $ Done ctx { stack = rest }
+        step ctx (I32Load MemArg { offset }) =
+            makeLoadInstr ctx offset 4 $ (\rest val -> Done ctx { stack = VI32 val : rest })
+        step ctx (I64Load MemArg { offset }) =
+            makeLoadInstr ctx offset 8 $ (\rest val -> Done ctx { stack = VI64 val : rest })
+        step ctx (F32Load MemArg { offset }) =
+            makeLoadInstr ctx offset 4 $ (\rest val -> Done ctx { stack = VF32 (wordToFloat val) : rest })
+        step ctx (F64Load MemArg { offset }) =
+            makeLoadInstr ctx offset 8 $ (\rest val -> Done ctx { stack = VF64 (wordToDouble val) : rest })
+        step ctx (I32Load8U MemArg { offset }) =
+            makeLoadInstr ctx offset 1 $ (\rest val -> Done ctx { stack = VI32 val : rest })
+        step ctx (I32Load8S MemArg { offset }) =
+            makeLoadInstr ctx offset 1 $ (\rest byte ->
+                let val = asWord32 $ if (byte :: Word8) >= 128 then -1 * fromIntegral (0xFF - byte + 1) else fromIntegral byte in
+                Done ctx { stack = VI32 val : rest })
+        step ctx (I32Load16U MemArg { offset }) = do
+            makeLoadInstr ctx offset 2 $ (\rest val -> Done ctx { stack = VI32 val : rest })
+        step ctx (I32Load16S MemArg { offset }) =
+            makeLoadInstr ctx offset 2 $ (\rest val ->
+                let signed = asWord32 $ if (val :: Word16) >= 2 ^ 15 then -1 * fromIntegral (0xFFFF - val + 1) else fromIntegral val in
+                Done ctx { stack = VI32 signed : rest })
+        step ctx (I64Load8U MemArg { offset }) =
+            makeLoadInstr ctx offset 1 $ (\rest val -> Done ctx { stack = VI64 val : rest })
+        step ctx (I64Load8S MemArg { offset }) =
+            makeLoadInstr ctx offset 1 $ (\rest byte ->
+                let val = asWord64 $ if (byte :: Word8) >= 128 then -1 * fromIntegral (0xFF - byte + 1) else fromIntegral byte in
+                Done ctx { stack = VI64 val : rest })
+        step ctx (I64Load16U MemArg { offset }) =
+            makeLoadInstr ctx offset 2 $ (\rest val -> Done ctx { stack = VI64 val : rest })
+        step ctx (I64Load16S MemArg { offset }) =
+            makeLoadInstr ctx offset 2 $ (\rest val ->
+                let signed = asWord64 $ if (val :: Word16) >= 2 ^ 15 then -1 * fromIntegral (0xFFFF - val + 1) else fromIntegral val in
+                Done ctx { stack = VI64 signed : rest })
+        step ctx (I64Load32U MemArg { offset }) =
+            makeLoadInstr ctx offset 4 $ (\rest val -> Done ctx { stack = VI64 val : rest })
+        step ctx (I64Load32S MemArg { offset }) =
+            makeLoadInstr ctx offset 4 $ (\rest val ->
+                let signed = asWord64 $ fromIntegral $ asInt32 val in
+                Done ctx { stack = VI64 signed : rest })
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (I32Store MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 4 v
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (I64Store MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 8 v
+        step ctx@EvalCtx{ stack = (VF32 f:rest) } (F32Store MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 4 $ floatToWord f
+        step ctx@EvalCtx{ stack = (VF64 f:rest) } (F64Store MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 8 $ doubleToWord f
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (I32Store8 MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 1 v
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (I32Store16 MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 2 v
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (I64Store8 MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 1 v
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (I64Store16 MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 2 v
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (I64Store32 MemArg { offset }) =
+            makeStoreInstr ctx { stack = rest } offset 4 v
+        step ctx@EvalCtx{ stack = st } CurrentMemory = do
+            let MemoryInstance { memory = memoryRef } = memInstances store ! (memaddrs moduleInstance ! 0)
+            memory <- readIORef memoryRef
+            let size = fromIntegral $ IOVector.length memory `div` pageSize
+            return $ Done ctx { stack = VI32 size : st }
+        step ctx@EvalCtx{ stack = (VI32 n:rest) } GrowMemory = do
+            let MemoryInstance { lim = limit@(Limit _ maxLen), memory = memoryRef } = memInstances store ! (memaddrs moduleInstance ! 0)
+            memory <- readIORef memoryRef
+            let size = fromIntegral $ IOVector.length memory `quot` pageSize
+            let growTo = size + fromIntegral n
+            result <- (
+                    if fromMaybe True ((growTo <=) . fromIntegral <$> maxLen) && growTo <= 0xFFFF
+                    then do
+                        mem' <- IOVector.grow memory $ fromIntegral n * pageSize
+                        writeIORef memoryRef mem'
+                        return size
+                    else return $ -1
+                )
+            return $ Done ctx { stack = VI32 (asWord32 $ fromIntegral result) : rest }
+        step ctx (I32Const v) = return $ Done ctx { stack = VI32 v : stack ctx }
+        step ctx (I64Const v) = return $ Done ctx { stack = VI64 v : stack ctx }
+        step ctx (F32Const v) = return $ Done ctx { stack = VF32 v : stack ctx }
+        step ctx (F64Const v) = return $ Done ctx { stack = VF64 v : stack ctx }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IAdd) =
+            return $ Done ctx { stack = VI32 (v1 + v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 ISub) =
+            return $ Done ctx { stack = VI32 (v1 - v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IMul) =
+            return $ Done ctx { stack = VI32 (v1 * v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IDivU) =
+            if v2 == 0
+            then return Trap
+            else return $ Done ctx { stack = VI32 (v1 `quot` v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IDivS) =
+            if v2 == 0 || (v1 == 0x80000000 && v2 == 0xFFFFFFFF)
+            then return Trap
+            else return $ Done ctx { stack = VI32 (asWord32 $ asInt32 v1 `quot` asInt32 v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IRemU) =
+            if v2 == 0
+            then return Trap
+            else return $ Done ctx { stack = VI32 (v1 `rem` v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IRemS) =
+            if v2 == 0
+            then return Trap
+            else return $ Done ctx { stack = VI32 (asWord32 $ asInt32 v1 `rem` asInt32 v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IAnd) =
+            return $ Done ctx { stack = VI32 (v1 .&. v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IOr) =
+            return $ Done ctx { stack = VI32 (v1 .|. v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IXor) =
+            return $ Done ctx { stack = VI32 (v1 `xor` v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IShl) =
+            return $ Done ctx { stack = VI32 (v1 `shiftL` (fromIntegral v2 `rem` 32)) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IShrU) =
+            return $ Done ctx { stack = VI32 (v1 `shiftR` (fromIntegral v2 `rem` 32)) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IShrS) =
+            return $ Done ctx { stack = VI32 (asWord32 $ asInt32 v1 `shiftR` (fromIntegral v2 `rem` 32)) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IRotl) =
+            return $ Done ctx { stack = VI32 (v1 `rotateL` fromIntegral v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IBinOp BS32 IRotr) =
+            return $ Done ctx { stack = VI32 (v1 `rotateR` fromIntegral v2) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IEq) =
+            return $ Done ctx { stack = VI32 (if v1 == v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 INe) =
+            return $ Done ctx { stack = VI32 (if v1 /= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 ILtU) =
+            return $ Done ctx { stack = VI32 (if v1 < v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 ILtS) =
+            return $ Done ctx { stack = VI32 (if asInt32 v1 < asInt32 v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IGtU) =
+            return $ Done ctx { stack = VI32 (if v1 > v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IGtS) =
+            return $ Done ctx { stack = VI32 (if asInt32 v1 > asInt32 v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 ILeU) =
+            return $ Done ctx { stack = VI32 (if v1 <= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 ILeS) =
+            return $ Done ctx { stack = VI32 (if asInt32 v1 <= asInt32 v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IGeU) =
+            return $ Done ctx { stack = VI32 (if v1 >= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v2:VI32 v1:rest) } (IRelOp BS32 IGeS) =
+            return $ Done ctx { stack = VI32 (if asInt32 v1 >= asInt32 v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } I32Eqz =
+            return $ Done ctx { stack = VI32 (if v == 0 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (IUnOp BS32 IClz) =
+            return $ Done ctx { stack = VI32 (fromIntegral $ countLeadingZeros v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (IUnOp BS32 ICtz) =
+            return $ Done ctx { stack = VI32 (fromIntegral $ countTrailingZeros v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (IUnOp BS32 IPopcnt) =
+            return $ Done ctx { stack = VI32 (fromIntegral $ popCount v) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IAdd) =
+            return $ Done ctx { stack = VI64 (v1 + v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 ISub) =
+            return $ Done ctx { stack = VI64 (v1 - v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IMul) =
+            return $ Done ctx { stack = VI64 (v1 * v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IDivU) =
+            if v2 == 0
+            then return Trap
+            else return $ Done ctx { stack = VI64 (v1 `quot` v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IDivS) =
+            if v2 == 0 || (v1 == 0x8000000000000000 && v2 == 0xFFFFFFFFFFFFFFFF)
+            then return Trap
+            else return $ Done ctx { stack = VI64 (asWord64 $ asInt64 v1 `quot` asInt64 v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IRemU) =
+            if v2 == 0
+            then return Trap
+            else return $ Done ctx { stack = VI64 (v1 `rem` v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IRemS) =
+            if v2 == 0
+            then return Trap
+            else return $ Done ctx { stack = VI64 (asWord64 $ asInt64 v1 `rem` asInt64 v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IAnd) =
+            return $ Done ctx { stack = VI64 (v1 .&. v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IOr) =
+            return $ Done ctx { stack = VI64 (v1 .|. v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IXor) =
+            return $ Done ctx { stack = VI64 (v1 `xor` v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IShl) =
+            return $ Done ctx { stack = VI64 (v1 `shiftL` (fromIntegral v2 `rem` 64)) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IShrU) =
+            return $ Done ctx { stack = VI64 (v1 `shiftR` (fromIntegral v2 `rem` 64)) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IShrS) =
+            return $ Done ctx { stack = VI64 (asWord64 $ asInt64 v1 `shiftR` (fromIntegral v2 `rem` 64)) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IRotl) =
+            return $ Done ctx { stack = VI64 (v1 `rotateL` fromIntegral v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IBinOp BS64 IRotr) =
+            return $ Done ctx { stack = VI64 (v1 `rotateR` fromIntegral v2) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IEq) =
+            return $ Done ctx { stack = VI32 (if v1 == v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 INe) =
+            return $ Done ctx { stack = VI32 (if v1 /= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 ILtU) =
+            return $ Done ctx { stack = VI32 (if v1 < v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 ILtS) =
+            return $ Done ctx { stack = VI32 (if asInt64 v1 < asInt64 v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IGtU) =
+            return $ Done ctx { stack = VI32 (if v1 > v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IGtS) =
+            return $ Done ctx { stack = VI32 (if asInt64 v1 > asInt64 v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 ILeU) =
+            return $ Done ctx { stack = VI32 (if v1 <= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 ILeS) =
+            return $ Done ctx { stack = VI32 (if asInt64 v1 <= asInt64 v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IGeU) =
+            return $ Done ctx { stack = VI32 (if v1 >= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v2:VI64 v1:rest) } (IRelOp BS64 IGeS) =
+            return $ Done ctx { stack = VI32 (if asInt64 v1 >= asInt64 v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } I64Eqz =
+            return $ Done ctx { stack = VI32 (if v == 0 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (IUnOp BS64 IClz) =
+            return $ Done ctx { stack = VI64 (fromIntegral $ countLeadingZeros v) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (IUnOp BS64 ICtz) =
+            return $ Done ctx { stack = VI64 (fromIntegral $ countTrailingZeros v) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (IUnOp BS64 IPopcnt) =
+            return $ Done ctx { stack = VI64 (fromIntegral $ popCount v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FAbs) =
+            return $ Done ctx { stack = VF32 (abs v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FNeg) =
+            return $ Done ctx { stack = VF32 (negate v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FCeil) =
+            return $ Done ctx { stack = VF32 (floatCeil v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FFloor) =
+            return $ Done ctx { stack = VF32 (floatFloor v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FTrunc) =
+            return $ Done ctx { stack = VF32 (floatTrunc v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FNearest) =
+            return $ Done ctx { stack = VF32 (nearest v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (FUnOp BS32 FSqrt) =
+            return $ Done ctx { stack = VF32 (sqrt v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FAbs) =
+            return $ Done ctx { stack = VF64 (abs v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FNeg) =
+            return $ Done ctx { stack = VF64 (negate v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FCeil) =
+            return $ Done ctx { stack = VF64 (doubleCeil v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FFloor) =
+            return $ Done ctx { stack = VF64 (doubleFloor v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FTrunc) =
+            return $ Done ctx { stack = VF64 (doubleTrunc v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FNearest) =
+            return $ Done ctx { stack = VF64 (nearest v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (FUnOp BS64 FSqrt) =
+            return $ Done ctx { stack = VF64 (sqrt v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FAdd) =
+            return $ Done ctx { stack = VF32 (v1 + v2) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FSub) =
+            return $ Done ctx { stack = VF32 (v1 - v2) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FMul) =
+            return $ Done ctx { stack = VF32 (v1 * v2) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FDiv) =
+            return $ Done ctx { stack = VF32 (v1 / v2) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FMin) =
+            return $ Done ctx { stack = VF32 (zeroAwareMin v1 v2) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FMax) =
+            return $ Done ctx { stack = VF32 (zeroAwareMax v1 v2) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FBinOp BS32 FCopySign) =
+            return $ Done ctx { stack = VF32 (copySign v1 v2) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FAdd) =
+            return $ Done ctx { stack = VF64 (v1 + v2) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FSub) =
+            return $ Done ctx { stack = VF64 (v1 - v2) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FMul) =
+            return $ Done ctx { stack = VF64 (v1 * v2) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FDiv) =
+            return $ Done ctx { stack = VF64 (v1 / v2) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FMin) =
+            return $ Done ctx { stack = VF64 (zeroAwareMin v1 v2) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FMax) =
+            return $ Done ctx { stack = VF64 (zeroAwareMax v1 v2) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FBinOp BS64 FCopySign) =
+            return $ Done ctx { stack = VF64 (copySign v1 v2) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FEq) =
+            return $ Done ctx { stack = VI32 (if v1 == v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FNe) =
+            return $ Done ctx { stack = VI32 (if v1 /= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FLt) =
+            return $ Done ctx { stack = VI32 (if v1 < v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FGt) =
+            return $ Done ctx { stack = VI32 (if v1 > v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FLe) =
+            return $ Done ctx { stack = VI32 (if v1 <= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v2:VF32 v1:rest) } (FRelOp BS32 FGe) =
+            return $ Done ctx { stack = VI32 (if v1 >= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FEq) =
+            return $ Done ctx { stack = VI32 (if v1 == v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FNe) =
+            return $ Done ctx { stack = VI32 (if v1 /= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FLt) =
+            return $ Done ctx { stack = VI32 (if v1 < v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FGt) =
+            return $ Done ctx { stack = VI32 (if v1 > v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FLe) =
+            return $ Done ctx { stack = VI32 (if v1 <= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v2:VF64 v1:rest) } (FRelOp BS64 FGe) =
+            return $ Done ctx { stack = VI32 (if v1 >= v2 then 1 else 0) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } I32WrapI64 =
+            return $ Done ctx { stack = VI32 (fromIntegral $ v .&. 0xFFFFFFFF) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (ITruncFU BS32 BS32) =
+            if isNaN v || isInfinite v || v >= 2^32 || v <= -1
+            then return Trap
+            else return $ Done ctx { stack = VI32 (truncate v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (ITruncFU BS32 BS64) =
+            if isNaN v || isInfinite v || v >= 2^32 || v <= -1
+            then return Trap
+            else return $ Done ctx { stack = VI32 (truncate v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (ITruncFU BS64 BS32) =
+            if isNaN v || isInfinite v || v >= 2^64 || v <= -1
+            then return Trap
+            else return $ Done ctx { stack = VI64 (truncate v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (ITruncFU BS64 BS64) =
+            if isNaN v || isInfinite v || v >= 2^64 || v <= -1
+            then return Trap
+            else return $ Done ctx { stack = VI64 (truncate v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (ITruncFS BS32 BS32) =
+            if isNaN v || isInfinite v || v >= 2^31 || v < -2^31
+            then return Trap
+            else return $ Done ctx { stack = VI32 (asWord32 $ truncate v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (ITruncFS BS32 BS64) =
+            if isNaN v || isInfinite v || v >= 2^31 || v < -2^31
+            then return Trap
+            else return $ Done ctx { stack = VI32 (asWord32 $ truncate v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (ITruncFS BS64 BS32) =
+            if isNaN v || isInfinite v || v >= 2^63 || v < -2^63
+            then return Trap
+            else return $ Done ctx { stack = VI64 (asWord64 $ truncate v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (ITruncFS BS64 BS64) =
+            if isNaN v || isInfinite v || v >= 2^63 || v < -2^63
+            then return Trap
+            else return $ Done ctx { stack = VI64 (asWord64 $ truncate v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } I64ExtendUI32 =
+            return $ Done ctx { stack = VI64 (fromIntegral v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } I64ExtendSI32 =
+            return $ Done ctx { stack = VI64 (asWord64 $ fromIntegral $ asInt32 v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FConvertIU BS32 BS32) =
+            return $ Done ctx { stack = VF32 (realToFrac v) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FConvertIU BS32 BS64) =
+            return $ Done ctx { stack = VF32 (realToFrac v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FConvertIU BS64 BS32) =
+            return $ Done ctx { stack = VF64 (realToFrac v) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FConvertIU BS64 BS64) =
+            return $ Done ctx { stack = VF64 (realToFrac v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FConvertIS BS32 BS32) =
+            return $ Done ctx { stack = VF32 (realToFrac $ asInt32 v) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FConvertIS BS32 BS64) =
+            return $ Done ctx { stack = VF32 (realToFrac $ asInt64 v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FConvertIS BS64 BS32) =
+            return $ Done ctx { stack = VF64 (realToFrac $ asInt32 v) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FConvertIS BS64 BS64) =
+            return $ Done ctx { stack = VF64 (realToFrac $ asInt64 v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } F32DemoteF64 =
+            return $ Done ctx { stack = VF32 (realToFrac v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } F64PromoteF32 =
+            return $ Done ctx { stack = VF64 (realToFrac v) : rest }
+        step ctx@EvalCtx{ stack = (VF32 v:rest) } (IReinterpretF BS32) =
+            return $ Done ctx { stack = VI32 (floatToWord v) : rest }
+        step ctx@EvalCtx{ stack = (VF64 v:rest) } (IReinterpretF BS64) =
+            return $ Done ctx { stack = VI64 (doubleToWord v) : rest }
+        step ctx@EvalCtx{ stack = (VI32 v:rest) } (FReinterpretI BS32) =
+            return $ Done ctx { stack = VF32 (wordToFloat v) : rest }
+        step ctx@EvalCtx{ stack = (VI64 v:rest) } (FReinterpretI BS64) =
+            return $ Done ctx { stack = VF64 (wordToDouble v) : rest }
+        step EvalCtx{ stack } instr = error $ "Error during evaluation of instruction: " ++ show instr ++ ". Stack " ++ show stack
+eval _ _ HostInstance { funcType, hostCode } args = Just <$> hostCode args
+
+invoke :: Store -> Address -> [Value] -> IO (Maybe [Value])
+invoke st funcIdx = eval defaultBudget st $ funcInstances st ! funcIdx
+
+invokeExport :: Store -> ModuleInstance -> TL.Text -> [Value] -> IO (Maybe [Value])
+invokeExport st ModuleInstance { exports } name args =
+    case Vector.find (\(ExportInstance n _) -> n == name) exports of
+        Just (ExportInstance _ (ExternFunction addr)) -> invoke st addr args
+        _ -> error $ "Function with name " ++ show name ++ " was not found in module's exports"
+
+getGlobalValueByName :: Store -> ModuleInstance -> TL.Text -> IO Value
+getGlobalValueByName store ModuleInstance { exports } name =
+    case Vector.find (\(ExportInstance n _) -> n == name) exports of
+        Just (ExportInstance _ (ExternGlobal addr)) ->
+            let globalInst = globalInstances store ! addr in
+            case globalInst of
+                GIConst _ v -> return v
+                GIMut _ ref -> readIORef ref
+        _ -> error $ "Function with name " ++ show name ++ " was not found in module's exports"
diff --git a/src/Language/Wasm/Lexer.x b/src/Language/Wasm/Lexer.x
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/Lexer.x
@@ -0,0 +1,437 @@
+{
+{-# LANGUAGE FlexibleContexts #-}
+
+module Language.Wasm.Lexer (
+    Lexeme(..),
+    Token(..),
+    AlexPosn(..),
+    scanner,
+    asFloat,
+    asDouble
+) where
+
+import qualified Data.ByteString.Lazy as LBS
+import qualified Data.Char as Char
+import qualified Data.ByteString.Lazy.UTF8 as LBSUtf8
+import Control.Applicative ((<$>))
+import Control.Monad (when)
+import Numeric.IEEE (infinity, nan)
+import Language.Wasm.FloatUtils (makeNaN, doubleToFloat)
+import Data.Word (Word8)
+import Data.List (isPrefixOf)
+import Text.Read (readEither)
+
+}
+
+%wrapper "monadUserState-bytestring"
+
+$digit     = [0-9]
+$hexdigit  = [$digit a-f A-F]
+$lower     = [a-z]
+$upper     = [A-Z]
+$alpha     = [$lower $upper]
+$namepunct = [\! \# \$ \% \& \' \* \+ \- \. \/ \: \< \= \> \? \@ \∖ \^ \_ \` \| \~]
+$idchar    = [$digit $alpha $namepunct]
+$space     = [\  \x09 \x0A \x0D]
+$linechar  = [^ \x09]
+$sign      = [\+ \-]
+$doublequote = \"
+
+@keyword     = $lower $idchar*
+@reserved    = $idchar+
+@linecomment = ";;" $linechar* \x0A
+@startblockcomment = "(;"
+@endblockcomment = ";)"
+@num = $digit (\_? $digit+)*
+@hexnum = $hexdigit (\_? $hexdigit+)*
+@id = "$" $idchar+
+@floatfrac = @num "." (@num)?
+@exp = [Ee] $sign? @num
+@scientificint = @num @exp
+@scientificfloat = @floatfrac @exp
+@float = @floatfrac | @scientificint | @scientificfloat
+@hexfloatfrac = "0x" @hexnum "." (@hexnum)?
+@hexexp = [Pp] $sign? @num
+@hexscientificint = "0x" @hexnum @hexexp
+@hexscientificfloat = @hexfloatfrac @hexexp
+@hexfloat = @hexfloatfrac | @hexscientificint | @hexscientificfloat
+@nanhex = "nan:0x" @hexnum
+
+tokens :-
+
+<0> $space                                ;
+<0> "nan"                                 { constToken $ TFloatLit $ BinRep (abs nan) }
+<0> "+nan"                                { constToken $ TFloatLit $ BinRep (abs nan) }
+<0> "-nan"                                { constToken $ TFloatLit $ BinRep nan }
+<0> $sign? @nanhex                        { parseNanSigned }
+<0> "inf"                                 { constToken $ TFloatLit $ BinRep inf }
+<0> "+inf"                                { constToken $ TFloatLit $ BinRep inf }
+<0> "-inf"                                { constToken $ TFloatLit $ BinRep minusInf }
+<0> @keyword                              { tokenStr TKeyword }
+<0> @linecomment                          ;
+<0> @id                                   { tokenStr TId }
+<0> "("                                   { constToken TOpenBracket }
+<0> ")"                                   { constToken TCloseBracket }
+<0> $sign? @num                           { parseDecimalSignedInt }
+<0> $sign? "0x" @hexnum                   { parseHexalSignedInt }
+<0> $sign? @float                         { parseDecFloat }
+<0> $sign? @hexfloat                      { parseHexFloat }
+<0, blockComment> @startblockcomment      { startBlockComment }
+<blockComment> [.\n]                      ;
+<blockComment> @endblockcomment           { endBlockComment }
+<0> $doublequote                          { startStringLiteral }
+<stringLiteral> \\ $hexdigit $hexdigit    { appendDoubleHexChar }
+<stringLiteral> \\t                       { appendCharToStringLiteral '\x09' }
+<stringLiteral> \\n                       { appendCharToStringLiteral '\x0A' }
+<stringLiteral> \\r                       { appendCharToStringLiteral '\x0D' }
+<stringLiteral> \\\"                      { appendCharToStringLiteral '\x22' }
+<stringLiteral> \\\'                      { appendCharToStringLiteral '\x27' }
+<stringLiteral> \\\\                      { appendCharToStringLiteral '\x5C' }
+<stringLiteral> \\n\{ @hexnum \}          { appendHexEscapedChar }
+<stringLiteral> $doublequote              { endStringLiteral }
+<stringLiteral> . / {isAllowedStringChar} { appendFromHead }
+<0> @reserved                             { tokenStr TReserved }
+
+{
+
+{- Lexem Helpers -}
+
+defaultStartCode :: Int
+defaultStartCode = 0
+
+-- inner string literal character predicate
+isAllowedStringChar :: user -> AlexInput -> Int -> AlexInput -> Bool
+isAllowedStringChar _userState (_pos, _rest, inp, _) _len _nextInp =
+    let Just (char, _) = LBSUtf8.decode inp in
+    let code = Char.ord char in
+    code >= 0x20 && code /= 0x7f && char /= '"' && char /= '\\'
+
+minusNaN, inf, minusInf :: Double
+minusNaN = negate nan
+inf = infinity
+minusInf = -infinity
+
+parseSign :: (Num a) => LBS.ByteString -> ((a -> a), Int64)
+parseSign str =
+    let Just (ch, _) = LBSUtf8.decode str in
+    case ch of
+        '-' -> (negate, 1)
+        '+' -> (abs, 1)
+        otherwise -> (abs, 0)
+
+{-# SPECIALIZE parseSign :: LBS.ByteString -> ((Integer -> Integer), Int64) #-}
+{-# SPECIALIZE parseSign :: LBS.ByteString -> ((Double -> Double), Int64) #-}
+
+parseHexalSignedInt :: AlexAction Lexeme
+parseHexalSignedInt = token $ \(pos, _, s, _) len -> 
+    let (sign, slen) = parseSign s in
+    let num = readHexFromPrefix (len - 2 - slen) $ LBSUtf8.drop (2 + slen) s in
+    Lexeme (Just pos) $ TIntLit $ sign num
+
+parseNanSigned :: AlexAction Lexeme
+parseNanSigned = token $ \(pos, _, s, _) len -> 
+    let (sign, slen) = parseSign s in
+    let num = readHexFromPrefix (len - 6 - slen) $ LBSUtf8.drop (6 + slen) s in
+    Lexeme (Just pos) $ TFloatLit $ BinRep $ sign $ makeNaN $ fromIntegral num
+
+parseDecimalSignedInt :: AlexAction Lexeme
+parseDecimalSignedInt = token $ \(pos, _, s, _) len ->
+    let (sign, slen) = parseSign s in
+    let num = readDecFromPrefix (len - slen) $ LBSUtf8.drop slen s in
+    Lexeme (Just pos) $ TIntLit $ sign num
+
+parseDecFloat :: AlexAction Lexeme
+parseDecFloat = token $ \(pos, _, s, _) len ->
+    Lexeme (Just pos) $ TFloatLit $ DecRep $ filter (/= '_') $ takeChars len s
+
+expAsInt :: String -> Int
+expAsInt [] = 0
+expAsInt ('+' : rest) = expAsInt rest
+expAsInt ('-' : rest) = negate $ expAsInt rest
+expAsInt str = read str
+
+readDecFloat :: String -> Either String Float
+readDecFloat str =
+    let (sign, rest) = case str of
+            ('+':rest) -> (abs, rest)
+            ('-':rest) -> (negate, rest)
+            rest -> (abs, rest)
+    in
+    let (val, exp) = splitBy (\c -> c == 'E' || c == 'e') rest in
+    let (int, frac) = splitBy (== '.') val in
+    let nullIfEmpty str = if null str then "0" else str in
+    let expInt = expAsInt $ nullIfEmpty exp in
+    if expInt > 38
+    then Left $ "constant out of range"
+    else fmap sign $ readEither $ nullIfEmpty int ++ "." ++ nullIfEmpty frac ++ "e" ++ nullIfEmpty exp
+
+readDecDouble :: String -> Either String Double
+readDecDouble str =
+    let (sign, rest) = case str of
+            ('+':rest) -> (abs, rest)
+            ('-':rest) -> (negate, rest)
+            rest -> (abs, rest)
+    in
+    let (val, exp) = splitBy (\c -> c == 'E' || c == 'e') rest in
+    let (int, frac) = splitBy (== '.') val in
+    let nullIfEmpty str = if null str then "0" else str in
+    let expInt = expAsInt $ nullIfEmpty exp in
+    if expInt > 308
+    then Left $ "constant out of range"
+    else fmap sign $ readEither $ nullIfEmpty int ++ "." ++ nullIfEmpty frac ++ "e" ++ nullIfEmpty exp
+
+parseHexFloat :: AlexAction Lexeme
+parseHexFloat = token $ \(pos, _, s, _) len ->
+    Lexeme (Just pos) $ TFloatLit $ HexRep $ filter (/= '_') $ takeChars len s
+
+readHexFloat :: Int -> String -> String -> Either String Double
+readHexFloat expLimit restrictedPrefix str =
+    let (sign, '0':'x':rest) = case str of
+            ('+':rest) -> (abs, rest)
+            ('-':rest) -> (negate, rest)
+            rest -> (abs, rest)
+    in
+    let (val, exp) = splitBy (\c -> c == 'P' || c == 'p') rest in
+    let (int, frac) = splitBy (== '.') val in
+    let intLen = length int in
+    let expInt = expAsInt exp in
+    if int == "1" && ((restrictedPrefix `isPrefixOf` frac && expInt == expLimit - 1) || expInt >= expLimit)
+    then Left $ "constant out of range"
+    else
+        let intVal = sum $ zipWith (\i c -> readHexFromChar c * (16 ^ (intLen - i))) [1..] int in
+        Right $ sign $ (intVal + readHexFrac frac) * readHexExp exp
+    where
+        readHexExp :: String -> Double
+        readHexExp [] = 1
+        readHexExp ('+' : rest) = readHexExp rest
+        readHexExp ('-' : rest) = 1 / readHexExp rest
+        readHexExp expStr = 2 ^ read expStr
+
+        readHexFrac :: String -> Double
+        readHexFrac [] = 0
+        readHexFrac val =
+            let len = length val in
+            sum $ zipWith (\i c -> readHexFromChar c / (16 ^ i)) [1..] val
+
+asFloat :: FloatRep -> Either String Float
+asFloat (BinRep d) = Right $ doubleToFloat d
+asFloat (HexRep s) = doubleToFloat <$> readHexFloat 128 "ffffff" s
+asFloat (DecRep s) = readDecFloat s
+
+asDouble :: FloatRep -> Either String Double
+asDouble (BinRep d) = Right d
+asDouble (HexRep s) = readHexFloat 1024 "fffffffffffff8" s
+asDouble (DecRep s) = readDecDouble s
+
+startBlockComment :: AlexAction Lexeme
+startBlockComment _inp _len = do
+    depth <- getLexerCommentDepth
+    if depth <= 0
+    then do
+        alexSetStartCode blockComment
+        setLexerCommentDepth 1
+    else
+        setLexerCommentDepth (depth + 1)
+    alexMonadScan
+
+endBlockComment :: AlexAction Lexeme
+endBlockComment _inp _len = do
+    depth <- getLexerCommentDepth
+    if depth == 1
+    then do
+        alexSetStartCode defaultStartCode
+        setLexerCommentDepth 0
+    else
+        setLexerCommentDepth (depth - 1)
+    alexMonadScan
+
+startStringLiteral :: AlexAction Lexeme
+startStringLiteral _inp _len = do
+    alexSetStartCode stringLiteral
+    setLexerStringFlag True
+    alexMonadScan
+
+appendCharToStringLiteral :: Char -> AlexAction Lexeme
+appendCharToStringLiteral chr _inp _len = do
+    addCharToLexerStringValue chr
+    alexMonadScan
+
+appendFromHead :: AlexAction Lexeme
+appendFromHead (_pos, _rest, inp, _) _len = do
+    let Just (first, _) = LBSUtf8.decode inp
+    addCharToLexerStringValue first
+    alexMonadScan
+
+appendDoubleHexChar :: AlexAction Lexeme
+appendDoubleHexChar (_pos, _rest, inp, _) _len = do
+    addCharCodeToLexerStringValue $ fromIntegral $ readHexFromPrefix 2 $ LBSUtf8.drop 1 inp
+    alexMonadScan
+
+-- TODO: add a predicate with code ranges check
+-- if 𝑛 < 0xD800 ∨ 0xE000 ≤ 𝑛 < 0x110000
+appendHexEscapedChar :: AlexAction Lexeme
+appendHexEscapedChar (pos, _rest, inp, _) len = do
+    let code = readHexFromPrefix (len - 3) $ LBSUtf8.drop 2 inp
+    if code < 0xD800 || (code >= 0xE000 && code < 0x110000)
+    then do
+        addCharToLexerStringValue $ Char.chr $ fromIntegral code
+        alexMonadScan
+    else
+        alexError $ "Character code should be in valid UTF range (code < 0xD800 || (code >= 0xE000 && code < 0x110000)): " ++ show pos
+
+endStringLiteral :: AlexAction Lexeme
+endStringLiteral (pos, _, _inp, _) _len = do
+    alexSetStartCode defaultStartCode
+    setLexerStringFlag False
+    str <- LBS.pack . reverse <$> getLexerStringValue
+    setLexerStringValue []
+    return $ Lexeme (Just pos) $ TStringLit str
+
+tokenStr :: (LBS.ByteString -> Token) -> AlexAction Lexeme
+tokenStr f = token $ \(pos, _, s, _) len -> (Lexeme (Just pos) $ f $ LBS.take len s)
+
+constToken :: Token -> AlexAction Lexeme
+constToken tok = token $ \(pos, _, _, _) _len -> (Lexeme (Just pos) tok)
+
+{- End Lexem Helpers -}
+
+data FloatRep
+    = BinRep Double
+    | DecRep String
+    | HexRep String
+    deriving (Show, Eq)
+
+data Token = TKeyword LBS.ByteString
+    | TIntLit Integer
+    | TFloatLit FloatRep
+    | TStringLit LBS.ByteString
+    | TId LBS.ByteString
+    | TOpenBracket
+    | TCloseBracket
+    | TReserved LBS.ByteString
+    | EOF
+    deriving (Show, Eq)
+
+data Lexeme = Lexeme { pos :: Maybe AlexPosn, tok :: Token } deriving (Show, Eq)
+
+data AlexUserState = AlexUserState {
+        lexerCommentDepth :: Int,
+        lexerStringValue  :: [Word8],
+        lexerIsString     :: Bool
+    }
+
+alexInitUserState :: AlexUserState
+alexInitUserState = AlexUserState {
+        lexerCommentDepth  = 0,
+        lexerIsString      = False,
+        lexerStringValue   = []
+    }
+
+getLexerCommentDepth :: Alex Int
+getLexerCommentDepth = Alex $ \s@AlexState{alex_ust=ust} ->
+    Right (s, lexerCommentDepth ust)
+
+setLexerCommentDepth :: Int -> Alex ()
+setLexerCommentDepth ss = Alex $ \s ->
+    Right (s{ alex_ust=(alex_ust s){ lexerCommentDepth = ss } }, ())
+
+getLexerStringFlag :: Alex Bool
+getLexerStringFlag = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, lexerIsString ust)
+
+setLexerStringFlag :: Bool -> Alex ()
+setLexerStringFlag isString = Alex $ \s ->
+    Right (s{ alex_ust=(alex_ust s){ lexerIsString = isString } }, ())
+
+getLexerStringValue :: Alex [Word8]
+getLexerStringValue = Alex $ \s@AlexState{alex_ust=ust} -> Right (s, lexerStringValue ust)
+
+setLexerStringValue :: [Word8] -> Alex ()
+setLexerStringValue ss = Alex $ \s ->
+    Right (s{ alex_ust=(alex_ust s){ lexerStringValue = ss } }, ())
+
+addCharToLexerStringValue :: Char -> Alex ()
+addCharToLexerStringValue c = Alex $ \s ->
+    let ust = alex_ust s in
+    Right (s{ alex_ust = ust{ lexerStringValue = (reverse $ LBS.unpack $ LBSUtf8.fromString [c]) ++ lexerStringValue ust } }, ())
+
+addCharCodeToLexerStringValue :: Word8 -> Alex ()
+addCharCodeToLexerStringValue c = Alex $ \s ->
+    let ust = alex_ust s in
+    Right (s{ alex_ust = ust{ lexerStringValue = c : lexerStringValue ust } }, ())
+
+alexEOF = return $ Lexeme Nothing EOF
+
+takeChars :: Int64 -> LBS.ByteString -> String
+takeChars n str = reverse $ go n str []
+    where
+        go :: Int64 -> LBS.ByteString -> String -> String
+        go 0 _ acc = acc
+        go n str acc = case LBSUtf8.uncons str of
+            Just (c, rest) -> go (n - 1) rest (c : acc)
+            Nothing -> acc
+
+readHexFromChar :: (Num a) => Char -> a
+readHexFromChar chr =
+    case chr of 
+        '0' -> 0 
+        '1' -> 1 
+        '2' -> 2 
+        '3' -> 3 
+        '4' -> 4 
+        '5' -> 5 
+        '6' -> 6 
+        '7' -> 7 
+        '8' -> 8 
+        '9' -> 9 
+        'A' -> 10 
+        'B' -> 11 
+        'C' -> 12 
+        'D' -> 13 
+        'E' -> 14 
+        'F' -> 15
+        'a' -> 10 
+        'b' -> 11 
+        'c' -> 12 
+        'd' -> 13 
+        'e' -> 14 
+        'f' -> 15
+        otherwise -> 0
+
+{-# SPECIALIZE readHexFromChar :: Char -> Integer #-}
+{-# SPECIALIZE readHexFromChar :: Char -> Double #-}
+
+readFromPrefix :: Int -> Int64 -> LBS.ByteString -> Integer
+readFromPrefix base n bstr
+    | base <= 16 =
+        let str = filter (/= '_') $ takeChars n bstr in
+        let len = length str in
+        sum $ zipWith (\i c -> readHexFromChar c * (fromIntegral base ^ fromIntegral (len - i))) [1..] str
+    | otherwise = error "base has to be less than or equal 16"
+
+readHexFromPrefix :: Int64 -> LBS.ByteString -> Integer
+readHexFromPrefix = readFromPrefix 16
+
+readDecFromPrefix :: Int64 -> LBS.ByteString -> Integer
+readDecFromPrefix = readFromPrefix 10
+
+splitBy :: (Char -> Bool) -> String -> (String, String)
+splitBy pred str =
+    case break pred str of
+        (left, (_ : rest)) -> (left, rest)
+        res -> res
+
+scanner :: LBS.ByteString -> Either String [Lexeme]
+scanner str = runAlex str loop
+    where
+        loop :: Alex [Lexeme]
+        loop = do
+            lex <- alexMonadScan
+            case lex of
+                Lexeme _ EOF -> do
+                    strFlag <- getLexerStringFlag
+                    when strFlag $ alexError "End of file reached before string literal end"
+                    commentDepth <- getLexerCommentDepth
+                    when (commentDepth > 0) $ alexError "End of file reached before block comment end"
+                    return [lex]
+                otherwise -> (lex :) <$> loop
+}
diff --git a/src/Language/Wasm/Parser.y b/src/Language/Wasm/Parser.y
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/Parser.y
@@ -0,0 +1,1943 @@
+{
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DeriveAnyClass #-}
+
+module Language.Wasm.Parser (
+    parseModule,
+    parseModuleFields,
+    parseScript,
+    desugarize,
+    ModuleField(..),
+    DataSegment(..),
+    ElemSegment(..),
+    StartFunction(..),
+    Export(..),
+    ExportDesc(..),
+    Table(..),
+    Memory(..),
+    Global(..),
+    Function(..),
+    LocalType(..),
+    Import(..),
+    ImportDesc(..),
+    Instruction(..),
+    TypeUse(..),
+    TypeDef(..),
+    PlainInstr(..),
+    Index(..),
+    Ident(..),
+    ParamType(..),
+    FuncType(..),
+    -- script
+    Script,
+    ModuleDef(..),
+    Command(..),
+    Action(..),
+    Assertion(..),
+    Meta(..)
+) where
+
+import Language.Wasm.Structure (
+        MemArg(..),
+        IUnOp(..),
+        IBinOp(..),
+        IRelOp(..),
+        FUnOp(..),
+        FBinOp(..),
+        FRelOp(..),
+        BitSize(..),
+        TableType(..),
+        ElemType(..),
+        Limit(..),
+        GlobalType(..),
+        ValueType(..)
+    )
+
+import qualified Language.Wasm.Structure as S
+
+import qualified Data.Text as T
+import qualified Data.Text.Lazy as TL
+import qualified Data.Text.Lazy.Encoding as TLEncoding
+import qualified Data.Text.Lazy.Read as TLRead
+
+import qualified Data.ByteString.Lazy as LBS
+import qualified Data.ByteString.Lazy.Char8 as LBSChar8
+import Data.Maybe (fromMaybe, fromJust, isNothing)
+import Data.List (foldl', findIndex, find)
+import Control.Monad (guard, foldM)
+
+import Numeric.Natural (Natural)
+import Data.Word (Word32, Word64)
+import Data.Bits ((.|.))
+import Numeric.IEEE (infinity, nan, maxFinite)
+import Language.Wasm.FloatUtils (doubleToFloat)
+import Control.DeepSeq (NFData)
+import GHC.Generics (Generic)
+
+import Language.Wasm.Lexer (
+        Token (
+            TKeyword,
+            TIntLit,
+            TFloatLit,
+            TStringLit,
+            TId,
+            TOpenBracket,
+            TCloseBracket,
+            TReserved,
+            EOF
+        ),
+        Lexeme(..),
+        AlexPosn(..),
+        asFloat,
+        asDouble
+    )
+
+}
+
+%name parseModule mod
+%name parseModuleFields modAsFields
+%name parseScript script
+%monad { Either String }
+%tokentype { Lexeme }
+
+%token
+
+'('                   { Lexeme _ TOpenBracket }
+')'                   { Lexeme _ TCloseBracket }
+'func'                { Lexeme _ (TKeyword "func") }
+'param'               { Lexeme _ (TKeyword "param") }
+'result'              { Lexeme _ (TKeyword "result") }
+'i32'                 { Lexeme _ (TKeyword "i32") }
+'i64'                 { Lexeme _ (TKeyword "i64") }
+'f32'                 { Lexeme _ (TKeyword "f32") }
+'f64'                 { Lexeme _ (TKeyword "f64") }
+'mut'                 { Lexeme _ (TKeyword "mut") }
+'anyfunc'             { Lexeme _ (TKeyword "anyfunc") }
+'type'                { Lexeme _ (TKeyword "type") }
+'unreachable'         { Lexeme _ (TKeyword "unreachable") }
+'nop'                 { Lexeme _ (TKeyword "nop") }
+'br'                  { Lexeme _ (TKeyword "br") }
+'br_if'               { Lexeme _ (TKeyword "br_if") }
+'br_table'            { Lexeme _ (TKeyword "br_table") }
+'return'              { Lexeme _ (TKeyword "return") }
+'call'                { Lexeme _ (TKeyword "call") }
+'call_indirect'       { Lexeme _ (TKeyword "call_indirect") }
+'drop'                { Lexeme _ (TKeyword "drop") }
+'select'              { Lexeme _ (TKeyword "select") }
+'get_local'           { Lexeme _ (TKeyword "get_local") }
+'set_local'           { Lexeme _ (TKeyword "set_local") }
+'tee_local'           { Lexeme _ (TKeyword "tee_local") }
+'get_global'          { Lexeme _ (TKeyword "get_global") }
+'set_global'          { Lexeme _ (TKeyword "set_global") }
+'i32.load'            { Lexeme _ (TKeyword "i32.load") }
+'i64.load'            { Lexeme _ (TKeyword "i64.load") }
+'f32.load'            { Lexeme _ (TKeyword "f32.load") }
+'f64.load'            { Lexeme _ (TKeyword "f64.load") }
+'i32.load8_s'         { Lexeme _ (TKeyword "i32.load8_s") }
+'i32.load8_u'         { Lexeme _ (TKeyword "i32.load8_u") }
+'i32.load16_s'        { Lexeme _ (TKeyword "i32.load16_s") }
+'i32.load16_u'        { Lexeme _ (TKeyword "i32.load16_u") }
+'i64.load8_s'         { Lexeme _ (TKeyword "i64.load8_s") }
+'i64.load8_u'         { Lexeme _ (TKeyword "i64.load8_u") }
+'i64.load16_s'        { Lexeme _ (TKeyword "i64.load16_s") }
+'i64.load16_u'        { Lexeme _ (TKeyword "i64.load16_u") }
+'i64.load32_s'        { Lexeme _ (TKeyword "i64.load32_s") }
+'i64.load32_u'        { Lexeme _ (TKeyword "i64.load32_u") }
+'i32.store'           { Lexeme _ (TKeyword "i32.store") }
+'i64.store'           { Lexeme _ (TKeyword "i64.store") }
+'f32.store'           { Lexeme _ (TKeyword "f32.store") }
+'f64.store'           { Lexeme _ (TKeyword "f64.store") }
+'i32.store8'          { Lexeme _ (TKeyword "i32.store8") }
+'i32.store16'         { Lexeme _ (TKeyword "i32.store16") }
+'i64.store8'          { Lexeme _ (TKeyword "i64.store8") }
+'i64.store16'         { Lexeme _ (TKeyword "i64.store16") }
+'i64.store32'         { Lexeme _ (TKeyword "i64.store32") }
+'current_memory'      { Lexeme _ (TKeyword "current_memory") }
+'grow_memory'         { Lexeme _ (TKeyword "grow_memory") }
+'memory.size'         { Lexeme _ (TKeyword "memory.size") }
+'memory.grow'         { Lexeme _ (TKeyword "memory.grow") }
+'i32.const'           { Lexeme _ (TKeyword "i32.const") }
+'i64.const'           { Lexeme _ (TKeyword "i64.const") }
+'f32.const'           { Lexeme _ (TKeyword "f32.const") }
+'f64.const'           { Lexeme _ (TKeyword "f64.const") }
+'i32.clz'             { Lexeme _ (TKeyword "i32.clz") }
+'i32.ctz'             { Lexeme _ (TKeyword "i32.ctz") }
+'i32.popcnt'          { Lexeme _ (TKeyword "i32.popcnt") }
+'i32.add'             { Lexeme _ (TKeyword "i32.add") }
+'i32.sub'             { Lexeme _ (TKeyword "i32.sub") }
+'i32.mul'             { Lexeme _ (TKeyword "i32.mul") }
+'i32.div_s'           { Lexeme _ (TKeyword "i32.div_s") }
+'i32.div_u'           { Lexeme _ (TKeyword "i32.div_u") }
+'i32.rem_s'           { Lexeme _ (TKeyword "i32.rem_s") }
+'i32.rem_u'           { Lexeme _ (TKeyword "i32.rem_u") }
+'i32.and'             { Lexeme _ (TKeyword "i32.and") }
+'i32.or'              { Lexeme _ (TKeyword "i32.or") }
+'i32.xor'             { Lexeme _ (TKeyword "i32.xor") }
+'i32.shl'             { Lexeme _ (TKeyword "i32.shl") }
+'i32.shr_s'           { Lexeme _ (TKeyword "i32.shr_s") }
+'i32.shr_u'           { Lexeme _ (TKeyword "i32.shr_u") }
+'i32.rotl'            { Lexeme _ (TKeyword "i32.rotl") }
+'i32.rotr'            { Lexeme _ (TKeyword "i32.rotr") }
+'i64.clz'             { Lexeme _ (TKeyword "i64.clz") }
+'i64.ctz'             { Lexeme _ (TKeyword "i64.ctz") }
+'i64.popcnt'          { Lexeme _ (TKeyword "i64.popcnt") }
+'i64.add'             { Lexeme _ (TKeyword "i64.add") }
+'i64.sub'             { Lexeme _ (TKeyword "i64.sub") }
+'i64.mul'             { Lexeme _ (TKeyword "i64.mul") }
+'i64.div_s'           { Lexeme _ (TKeyword "i64.div_s") }
+'i64.div_u'           { Lexeme _ (TKeyword "i64.div_u") }
+'i64.rem_s'           { Lexeme _ (TKeyword "i64.rem_s") }
+'i64.rem_u'           { Lexeme _ (TKeyword "i64.rem_u") }
+'i64.and'             { Lexeme _ (TKeyword "i64.and") }
+'i64.or'              { Lexeme _ (TKeyword "i64.or") }
+'i64.xor'             { Lexeme _ (TKeyword "i64.xor") }
+'i64.shl'             { Lexeme _ (TKeyword "i64.shl") }
+'i64.shr_s'           { Lexeme _ (TKeyword "i64.shr_s") }
+'i64.shr_u'           { Lexeme _ (TKeyword "i64.shr_u") }
+'i64.rotl'            { Lexeme _ (TKeyword "i64.rotl") }
+'i64.rotr'            { Lexeme _ (TKeyword "i64.rotr") }
+'f32.abs'             { Lexeme _ (TKeyword "f32.abs") }
+'f32.neg'             { Lexeme _ (TKeyword "f32.neg") }
+'f32.ceil'            { Lexeme _ (TKeyword "f32.ceil") }
+'f32.floor'           { Lexeme _ (TKeyword "f32.floor") }
+'f32.trunc'           { Lexeme _ (TKeyword "f32.trunc") }
+'f32.nearest'         { Lexeme _ (TKeyword "f32.nearest") }
+'f32.sqrt'            { Lexeme _ (TKeyword "f32.sqrt") }
+'f32.add'             { Lexeme _ (TKeyword "f32.add") }
+'f32.sub'             { Lexeme _ (TKeyword "f32.sub") }
+'f32.mul'             { Lexeme _ (TKeyword "f32.mul") }
+'f32.div'             { Lexeme _ (TKeyword "f32.div") }
+'f32.min'             { Lexeme _ (TKeyword "f32.min") }
+'f32.max'             { Lexeme _ (TKeyword "f32.max") }
+'f32.copysign'        { Lexeme _ (TKeyword "f32.copysign") }
+'f64.abs'             { Lexeme _ (TKeyword "f64.abs") }
+'f64.neg'             { Lexeme _ (TKeyword "f64.neg") }
+'f64.ceil'            { Lexeme _ (TKeyword "f64.ceil") }
+'f64.floor'           { Lexeme _ (TKeyword "f64.floor") }
+'f64.trunc'           { Lexeme _ (TKeyword "f64.trunc") }
+'f64.nearest'         { Lexeme _ (TKeyword "f64.nearest") }
+'f64.sqrt'            { Lexeme _ (TKeyword "f64.sqrt") }
+'f64.add'             { Lexeme _ (TKeyword "f64.add") }
+'f64.sub'             { Lexeme _ (TKeyword "f64.sub") }
+'f64.mul'             { Lexeme _ (TKeyword "f64.mul") }
+'f64.div'             { Lexeme _ (TKeyword "f64.div") }
+'f64.min'             { Lexeme _ (TKeyword "f64.min") }
+'f64.max'             { Lexeme _ (TKeyword "f64.max") }
+'f64.copysign'        { Lexeme _ (TKeyword "f64.copysign") }
+'i32.eqz'             { Lexeme _ (TKeyword "i32.eqz") }
+'i32.eq'              { Lexeme _ (TKeyword "i32.eq") }
+'i32.ne'              { Lexeme _ (TKeyword "i32.ne") }
+'i32.lt_s'            { Lexeme _ (TKeyword "i32.lt_s") }
+'i32.lt_u'            { Lexeme _ (TKeyword "i32.lt_u") }
+'i32.gt_s'            { Lexeme _ (TKeyword "i32.gt_s") }
+'i32.gt_u'            { Lexeme _ (TKeyword "i32.gt_u") }
+'i32.le_s'            { Lexeme _ (TKeyword "i32.le_s") }
+'i32.le_u'            { Lexeme _ (TKeyword "i32.le_u") }
+'i32.ge_s'            { Lexeme _ (TKeyword "i32.ge_s") }
+'i32.ge_u'            { Lexeme _ (TKeyword "i32.ge_u") }
+'i64.eqz'             { Lexeme _ (TKeyword "i64.eqz") }
+'i64.eq'              { Lexeme _ (TKeyword "i64.eq") }
+'i64.ne'              { Lexeme _ (TKeyword "i64.ne") }
+'i64.lt_s'            { Lexeme _ (TKeyword "i64.lt_s") }
+'i64.lt_u'            { Lexeme _ (TKeyword "i64.lt_u") }
+'i64.gt_s'            { Lexeme _ (TKeyword "i64.gt_s") }
+'i64.gt_u'            { Lexeme _ (TKeyword "i64.gt_u") }
+'i64.le_s'            { Lexeme _ (TKeyword "i64.le_s") }
+'i64.le_u'            { Lexeme _ (TKeyword "i64.le_u") }
+'i64.ge_s'            { Lexeme _ (TKeyword "i64.ge_s") }
+'i64.ge_u'            { Lexeme _ (TKeyword "i64.ge_u") }
+'f32.eq'              { Lexeme _ (TKeyword "f32.eq") }
+'f32.ne'              { Lexeme _ (TKeyword "f32.ne") }
+'f32.lt'              { Lexeme _ (TKeyword "f32.lt") }
+'f32.gt'              { Lexeme _ (TKeyword "f32.gt") }
+'f32.le'              { Lexeme _ (TKeyword "f32.le") }
+'f32.ge'              { Lexeme _ (TKeyword "f32.ge") }
+'f64.eq'              { Lexeme _ (TKeyword "f64.eq") }
+'f64.ne'              { Lexeme _ (TKeyword "f64.ne") }
+'f64.lt'              { Lexeme _ (TKeyword "f64.lt") }
+'f64.gt'              { Lexeme _ (TKeyword "f64.gt") }
+'f64.le'              { Lexeme _ (TKeyword "f64.le") }
+'f64.ge'              { Lexeme _ (TKeyword "f64.ge") }
+'i32.wrap/i64'        { Lexeme _ (TKeyword "i32.wrap/i64") }
+'i32.trunc_s/f32'     { Lexeme _ (TKeyword "i32.trunc_s/f32") }
+'i32.trunc_u/f32'     { Lexeme _ (TKeyword "i32.trunc_u/f32") }
+'i32.trunc_s/f64'     { Lexeme _ (TKeyword "i32.trunc_s/f64") }
+'i32.trunc_u/f64'     { Lexeme _ (TKeyword "i32.trunc_u/f64") }
+'i64.extend_s/i32'    { Lexeme _ (TKeyword "i64.extend_s/i32") }
+'i64.extend_u/i32'    { Lexeme _ (TKeyword "i64.extend_u/i32") }
+'i64.trunc_s/f32'     { Lexeme _ (TKeyword "i64.trunc_s/f32") }
+'i64.trunc_u/f32'     { Lexeme _ (TKeyword "i64.trunc_u/f32") }
+'i64.trunc_s/f64'     { Lexeme _ (TKeyword "i64.trunc_s/f64") }
+'i64.trunc_u/f64'     { Lexeme _ (TKeyword "i64.trunc_u/f64") }
+'f32.convert_s/i32'   { Lexeme _ (TKeyword "f32.convert_s/i32") }
+'f32.convert_u/i32'   { Lexeme _ (TKeyword "f32.convert_u/i32") }
+'f32.convert_s/i64'   { Lexeme _ (TKeyword "f32.convert_s/i64") }
+'f32.convert_u/i64'   { Lexeme _ (TKeyword "f32.convert_u/i64") }
+'f32.demote/f64'      { Lexeme _ (TKeyword "f32.demote/f64") }
+'f64.convert_s/i32'   { Lexeme _ (TKeyword "f64.convert_s/i32") }
+'f64.convert_u/i32'   { Lexeme _ (TKeyword "f64.convert_u/i32") }
+'f64.convert_s/i64'   { Lexeme _ (TKeyword "f64.convert_s/i64") }
+'f64.convert_u/i64'   { Lexeme _ (TKeyword "f64.convert_u/i64") }
+'f64.promote/f32'     { Lexeme _ (TKeyword "f64.promote/f32") }
+'i32.reinterpret/f32' { Lexeme _ (TKeyword "i32.reinterpret/f32") }
+'i64.reinterpret/f64' { Lexeme _ (TKeyword "i64.reinterpret/f64") }
+'f32.reinterpret/i32' { Lexeme _ (TKeyword "f32.reinterpret/i32") }
+'f64.reinterpret/i64' { Lexeme _ (TKeyword "f64.reinterpret/i64") }
+'block'               { Lexeme _ (TKeyword "block") }
+'loop'                { Lexeme _ (TKeyword "loop") }
+'if'                  { Lexeme _ (TKeyword "if") }
+'else'                { Lexeme _ (TKeyword "else") }
+'end'                 { Lexeme _ (TKeyword "end") }
+'then'                { Lexeme _ (TKeyword "then") }
+'table'               { Lexeme _ (TKeyword "table") }
+'memory'              { Lexeme _ (TKeyword "memory") }
+'global'              { Lexeme _ (TKeyword "global") }
+'import'              { Lexeme _ (TKeyword "import") }
+'export'              { Lexeme _ (TKeyword "export") }
+'local'               { Lexeme _ (TKeyword "local") }
+'elem'                { Lexeme _ (TKeyword "elem") }
+'data'                { Lexeme _ (TKeyword "data") }
+'offset'              { Lexeme _ (TKeyword "offset") }
+'start'               { Lexeme _ (TKeyword "start") }
+'module'              { Lexeme _ (TKeyword "module") }
+-- script extension
+'binary'              { Lexeme _ (TKeyword "binary") }
+'quote'               { Lexeme _ (TKeyword "quote") }
+'register'            { Lexeme _ (TKeyword "register") }
+'invoke'              { Lexeme _ (TKeyword "invoke") }
+'get'                 { Lexeme _ (TKeyword "get") }
+'assert_return'       { Lexeme _ (TKeyword "assert_return") }
+'assert_return_canonical_nan' { Lexeme _ (TKeyword "assert_return_canonical_nan") }
+'assert_return_arithmetic_nan' { Lexeme _ (TKeyword "assert_return_arithmetic_nan") }
+'assert_trap'         { Lexeme _ (TKeyword "assert_trap") }
+'assert_malformed'    { Lexeme _ (TKeyword "assert_malformed") }
+'assert_invalid'      { Lexeme _ (TKeyword "assert_invalid") }
+'assert_unlinkable'   { Lexeme _ (TKeyword "assert_unlinkable") }
+'assert_exhaustion'   { Lexeme _ (TKeyword "assert_exhaustion") }
+'script'              { Lexeme _ (TKeyword "script") }
+'input'               { Lexeme _ (TKeyword "input") }
+'output'              { Lexeme _ (TKeyword "output") }
+-- script extension end
+id                    { Lexeme _ (TId $$) }
+int                   { Lexeme _ (TIntLit $$) }
+f64                   { Lexeme _ (TFloatLit $$) }
+offset                { Lexeme _ (TKeyword (asOffset -> Just $$)) }
+align                 { Lexeme _ (TKeyword (asAlign -> Just $$)) }
+str                   { Lexeme _ (TStringLit $$) }
+EOF                   { Lexeme _ EOF }
+
+%%
+
+string :: { TL.Text }
+    : str {%
+        case TLEncoding.decodeUtf8' $1 of
+            Right t -> Right t
+            Left err -> Left "invalid utf8 string"
+    }
+
+name :: { TL.Text }
+    : string { $1 }
+
+ident :: { Ident }
+    : id { Ident (TLEncoding.decodeUtf8 $1) }
+
+valtype :: { ValueType }
+    : 'i32' { I32 }
+    | 'i64' { I64 }
+    | 'f32' { F32 }
+    | 'f64' { F64 }
+
+index :: { Index }
+    : u32 { Index $1 }
+    | ident { Named $1 }
+
+int32 :: { Integer }
+    : int {%
+        if $1 >= -(2^31) && $1 < 2^32
+        then Right $1
+        else Left ("Int literal value is out of signed int32 boundaries: " ++ show $1)
+    }
+
+u32 :: { Natural }
+    : int {%
+        if $1 >= 0 && $1 < 2^32
+        then Right (fromIntegral $1)
+        else Left ("Int literal value is out of unsigned int32 boundaries: " ++ show $1)
+    }
+
+int64 :: { Integer }
+    : int {%
+        if $1 >= -(2^63) && $1 < 2^64
+        then Right $1
+        else Left ("Int literal value is out of signed int64 boundaries: " ++ show $1)
+    }
+
+float32 :: { Float }
+    : int {%
+        let maxInt = 340282356779733623858607532500980858880 in
+        if $1 <= maxInt && $1 >= -maxInt
+        then return $ fromIntegral $1
+        else Left "constant out of range"
+    }
+    | f64 {% asFloat $1 }
+
+float64 :: { Double }
+    : int {%
+        let maxInt = round (maxFinite :: Double) in
+        if $1 <= maxInt && $1 >= -maxInt
+        then return $ fromIntegral $1
+        else Left "constant out of range"
+    }
+    | f64 {% asDouble $1 }
+
+plaininstr :: { PlainInstr }
+    -- control instructions
+    : 'unreachable'                  { Unreachable }
+    | 'nop'                          { Nop }
+    | 'br' index                     { Br $2 }
+    | 'br_if' index                  { BrIf $2 }
+    | 'br_table' rev_list1(index)    { BrTable (reverse $ tail $2) (head $2) }
+    | 'return'                       { Return }
+    | 'call' index                   { Call $2 }
+    | 'drop'                         { Drop }
+    | 'select'                       { Select }
+    -- variable instructions
+    | 'get_local' index              { GetLocal $2 }
+    | 'set_local' index              { SetLocal $2 }
+    | 'tee_local' index              { TeeLocal $2 }
+    | 'get_global' index             { GetGlobal $2 }
+    | 'set_global' index             { SetGlobal $2 }
+    -- memory instructions
+    | 'i32.load' memarg4             { I32Load $2 }
+    | 'i64.load' memarg8             { I64Load $2 }
+    | 'f32.load' memarg4             { F32Load $2 }
+    | 'f64.load' memarg8             { F64Load $2 }
+    | 'i32.load8_s' memarg1          { I32Load8S $2 }
+    | 'i32.load8_u' memarg1          { I32Load8U $2 }
+    | 'i32.load16_s' memarg2         { I32Load16S $2 }
+    | 'i32.load16_u' memarg2         { I32Load16U $2 }
+    | 'i64.load8_s' memarg1          { I64Load8S $2 }
+    | 'i64.load8_u' memarg1          { I64Load8U $2 }
+    | 'i64.load16_s' memarg2         { I64Load16S $2 }
+    | 'i64.load16_u' memarg2         { I64Load16U $2 }
+    | 'i64.load32_s' memarg4         { I64Load32S $2 }
+    | 'i64.load32_u' memarg4         { I64Load32U $2 }
+    | 'i32.store' memarg4            { I32Store $2 }
+    | 'i64.store' memarg8            { I64Store $2 }
+    | 'f32.store' memarg4            { F32Store $2 }
+    | 'f64.store' memarg8            { F64Store $2 }
+    | 'i32.store8' memarg1           { I32Store8 $2 }
+    | 'i32.store16' memarg2          { I32Store16 $2 }
+    | 'i64.store8' memarg1           { I64Store8 $2 }
+    | 'i64.store16' memarg2          { I64Store16 $2 }
+    | 'i64.store32' memarg4          { I64Store32 $2 }
+    | 'current_memory'               { CurrentMemory }
+    | 'grow_memory'                  { GrowMemory }
+    | 'memory.size'                  { CurrentMemory }
+    | 'memory.grow'                  { GrowMemory }
+    -- numeric instructions
+    | 'i32.const' int32              { I32Const $2 }
+    | 'i64.const' int64              { I64Const $2 }
+    | 'f32.const' float32            { F32Const $2 }
+    | 'f64.const' float64            { F64Const $2 }
+    | 'i32.clz'                      { IUnOp BS32 IClz }
+    | 'i32.ctz'                      { IUnOp BS32 ICtz }
+    | 'i32.popcnt'                   { IUnOp BS32 IPopcnt }
+    | 'i32.add'                      { IBinOp BS32 IAdd }
+    | 'i32.sub'                      { IBinOp BS32 ISub }
+    | 'i32.mul'                      { IBinOp BS32 IMul }
+    | 'i32.div_s'                    { IBinOp BS32 IDivS }
+    | 'i32.div_u'                    { IBinOp BS32 IDivU }
+    | 'i32.rem_s'                    { IBinOp BS32 IRemS }
+    | 'i32.rem_u'                    { IBinOp BS32 IRemU }
+    | 'i32.and'                      { IBinOp BS32 IAnd }
+    | 'i32.or'                       { IBinOp BS32 IOr }
+    | 'i32.xor'                      { IBinOp BS32 IXor }
+    | 'i32.shl'                      { IBinOp BS32 IShl }
+    | 'i32.shr_s'                    { IBinOp BS32 IShrS }
+    | 'i32.shr_u'                    { IBinOp BS32 IShrU }
+    | 'i32.rotl'                     { IBinOp BS32 IRotl }
+    | 'i32.rotr'                     { IBinOp BS32 IRotr }
+    | 'i64.clz'                      { IUnOp BS64 IClz }
+    | 'i64.ctz'                      { IUnOp BS64 ICtz }
+    | 'i64.popcnt'                   { IUnOp BS64 IPopcnt }
+    | 'i64.add'                      { IBinOp BS64 IAdd }
+    | 'i64.sub'                      { IBinOp BS64 ISub }
+    | 'i64.mul'                      { IBinOp BS64 IMul }
+    | 'i64.div_s'                    { IBinOp BS64 IDivS }
+    | 'i64.div_u'                    { IBinOp BS64 IDivU }
+    | 'i64.rem_s'                    { IBinOp BS64 IRemS }
+    | 'i64.rem_u'                    { IBinOp BS64 IRemU }
+    | 'i64.and'                      { IBinOp BS64 IAnd }
+    | 'i64.or'                       { IBinOp BS64 IOr }
+    | 'i64.xor'                      { IBinOp BS64 IXor }
+    | 'i64.shl'                      { IBinOp BS64 IShl }
+    | 'i64.shr_s'                    { IBinOp BS64 IShrS }
+    | 'i64.shr_u'                    { IBinOp BS64 IShrU }
+    | 'i64.rotl'                     { IBinOp BS64 IRotl }
+    | 'i64.rotr'                     { IBinOp BS64 IRotr }
+    | 'f32.abs'                      { FUnOp BS32 FAbs }
+    | 'f32.neg'                      { FUnOp BS32 FNeg }
+    | 'f32.ceil'                     { FUnOp BS32 FCeil }
+    | 'f32.floor'                    { FUnOp BS32 FFloor }
+    | 'f32.trunc'                    { FUnOp BS32 FTrunc }
+    | 'f32.nearest'                  { FUnOp BS32 FNearest }
+    | 'f32.sqrt'                     { FUnOp BS32 FSqrt }
+    | 'f32.add'                      { FBinOp BS32 FAdd }
+    | 'f32.sub'                      { FBinOp BS32 FSub }
+    | 'f32.mul'                      { FBinOp BS32 FMul }
+    | 'f32.div'                      { FBinOp BS32 FDiv }
+    | 'f32.min'                      { FBinOp BS32 FMin }
+    | 'f32.max'                      { FBinOp BS32 FMax }
+    | 'f32.copysign'                 { FBinOp BS32 FCopySign }
+    | 'f64.abs'                      { FUnOp BS64 FAbs }
+    | 'f64.neg'                      { FUnOp BS64 FNeg }
+    | 'f64.ceil'                     { FUnOp BS64 FCeil }
+    | 'f64.floor'                    { FUnOp BS64 FFloor }
+    | 'f64.trunc'                    { FUnOp BS64 FTrunc }
+    | 'f64.nearest'                  { FUnOp BS64 FNearest }
+    | 'f64.sqrt'                     { FUnOp BS64 FSqrt }
+    | 'f64.add'                      { FBinOp BS64 FAdd }
+    | 'f64.sub'                      { FBinOp BS64 FSub }
+    | 'f64.mul'                      { FBinOp BS64 FMul }
+    | 'f64.div'                      { FBinOp BS64 FDiv }
+    | 'f64.min'                      { FBinOp BS64 FMin }
+    | 'f64.max'                      { FBinOp BS64 FMax }
+    | 'f64.copysign'                 { FBinOp BS64 FCopySign }
+    | 'i32.eqz'                      { I32Eqz }
+    | 'i32.eq'                       { IRelOp BS32 IEq }
+    | 'i32.ne'                       { IRelOp BS32 INe }
+    | 'i32.lt_s'                     { IRelOp BS32 ILtS }
+    | 'i32.lt_u'                     { IRelOp BS32 ILtU }
+    | 'i32.gt_s'                     { IRelOp BS32 IGtS }
+    | 'i32.gt_u'                     { IRelOp BS32 IGtU }
+    | 'i32.le_s'                     { IRelOp BS32 ILeS }
+    | 'i32.le_u'                     { IRelOp BS32 ILeU }
+    | 'i32.ge_s'                     { IRelOp BS32 IGeS }
+    | 'i32.ge_u'                     { IRelOp BS32 IGeU }
+    | 'i64.eqz'                      { I64Eqz }
+    | 'i64.eq'                       { IRelOp BS64 IEq }
+    | 'i64.ne'                       { IRelOp BS64 INe }
+    | 'i64.lt_s'                     { IRelOp BS64 ILtS }
+    | 'i64.lt_u'                     { IRelOp BS64 ILtU }
+    | 'i64.gt_s'                     { IRelOp BS64 IGtS }
+    | 'i64.gt_u'                     { IRelOp BS64 IGtU }
+    | 'i64.le_s'                     { IRelOp BS64 ILeS }
+    | 'i64.le_u'                     { IRelOp BS64 ILeU }
+    | 'i64.ge_s'                     { IRelOp BS64 IGeS }
+    | 'i64.ge_u'                     { IRelOp BS64 IGeU }
+    | 'f32.eq'                       { FRelOp BS32 FEq }
+    | 'f32.ne'                       { FRelOp BS32 FNe }
+    | 'f32.lt'                       { FRelOp BS32 FLt }
+    | 'f32.gt'                       { FRelOp BS32 FGt }
+    | 'f32.le'                       { FRelOp BS32 FLe }
+    | 'f32.ge'                       { FRelOp BS32 FGe }
+    | 'f64.eq'                       { FRelOp BS64 FEq }
+    | 'f64.ne'                       { FRelOp BS64 FNe }
+    | 'f64.lt'                       { FRelOp BS64 FLt }
+    | 'f64.gt'                       { FRelOp BS64 FGt }
+    | 'f64.le'                       { FRelOp BS64 FLe }
+    | 'f64.ge'                       { FRelOp BS64 FGe }
+    | 'i32.wrap/i64'                 { I32WrapI64 }
+    | 'i32.trunc_s/f32'              { ITruncFS BS32 BS32 }
+    | 'i32.trunc_u/f32'              { ITruncFU BS32 BS32 }
+    | 'i32.trunc_s/f64'              { ITruncFS BS32 BS64 }
+    | 'i32.trunc_u/f64'              { ITruncFU BS32 BS64 }
+    | 'i64.extend_s/i32'             { I64ExtendSI32 }
+    | 'i64.extend_u/i32'             { I64ExtendUI32 }
+    | 'i64.trunc_s/f32'              { ITruncFS BS64 BS32 }
+    | 'i64.trunc_u/f32'              { ITruncFU BS64 BS32 }
+    | 'i64.trunc_s/f64'              { ITruncFS BS64 BS64 }
+    | 'i64.trunc_u/f64'              { ITruncFU BS64 BS64 }
+    | 'f32.convert_s/i32'            { FConvertIS BS32 BS32 }
+    | 'f32.convert_u/i32'            { FConvertIU BS32 BS32 }
+    | 'f32.convert_s/i64'            { FConvertIS BS32 BS64 }
+    | 'f32.convert_u/i64'            { FConvertIU BS32 BS64 }
+    | 'f32.demote/f64'               { F32DemoteF64 }
+    | 'f64.convert_s/i32'            { FConvertIS BS64 BS32 }
+    | 'f64.convert_u/i32'            { FConvertIU BS64 BS32 }
+    | 'f64.convert_s/i64'            { FConvertIS BS64 BS64 }
+    | 'f64.convert_u/i64'            { FConvertIU BS64 BS64 }
+    | 'f64.promote/f32'              { F64PromoteF32 }
+    | 'i32.reinterpret/f32'          { IReinterpretF BS32 }
+    | 'i64.reinterpret/f64'          { IReinterpretF BS64 }
+    | 'f32.reinterpret/i32'          { FReinterpretI BS32 }
+    | 'f64.reinterpret/i64'          { FReinterpretI BS64 }
+
+typeuse :: { TypeUse }
+    : '(' typeuse1 { $2 }
+    | {- empty -} { AnonimousTypeUse $ FuncType [] [] }
+
+typeuse1 :: { TypeUse }
+    : 'type' index ')' typedtypeuse { IndexedTypeUse $2 $4 }
+    | paramsresultstypeuse { AnonimousTypeUse $1 }
+
+typedtypeuse :: { Maybe FuncType }
+    : '(' paramsresultstypeuse { Just $2 }
+    | {- empty -} { Nothing }
+
+typedef :: { TypeDef }
+    : 'type' opt(ident) functype ')' { TypeDef $2 $3 }
+
+functype :: { FuncType }
+    : '(' 'func' params_results { $3 }
+
+params_results :: { FuncType }
+    : ')' { emptyFuncType }
+    | '(' params_results1 { $2 }
+
+params_results1 :: { FuncType }
+    : 'param' list(valtype) ')' params_results { mergeFuncType (FuncType (map (ParamType Nothing) $2) []) $4 }
+    | 'param' ident valtype ')' params_results { mergeFuncType (FuncType [ParamType (Just $2) $3] []) $5 }
+    | results1 { $1 }
+
+results :: { FuncType }
+    : ')' { emptyFuncType }
+    | '(' results1 { $2 }
+
+results1 :: { FuncType }
+    : 'result' list(valtype) ')' results { mergeFuncType (FuncType [] $2) $4 }
+
+paramsresultstypeuse :: { FuncType }
+    : paramsresultstypeuse '(' paramsresulttypeuse { mergeFuncType $1 $3 }
+    | paramsresulttypeuse { $1 }
+
+paramsresulttypeuse :: { FuncType }
+    : 'param' list(valtype) ')' { FuncType (map (ParamType Nothing) $2) [] }
+    | 'param' ident valtype ')' { FuncType [ParamType (Just $2) $3] [] }
+    | 'result' list(valtype) ')' { FuncType [] $2 }
+
+memarg1 :: { MemArg }
+    : opt(offset) opt(align) {% parseMemArg 1 $1 $2 }
+
+memarg2 :: { MemArg }
+    : opt(offset) opt(align) {% parseMemArg 2 $1 $2 }
+
+memarg4 :: { MemArg }
+    : opt(offset) opt(align) {% parseMemArg 4 $1 $2 }
+
+memarg8 :: { MemArg }
+    : opt(offset) opt(align) {% parseMemArg 8 $1 $2 }
+
+instruction :: { [Instruction] }
+    : raw_instr { $1 }
+    | folded_instr { $1 }
+
+raw_instr :: { [Instruction] }
+    : plaininstr { [PlainInstr $1] }
+    | 'call_indirect' raw_call_indirect { $2 }
+    | 'block' opt(ident) raw_block {% (: []) `fmap` $3 $2 }
+    | 'loop' opt(ident) raw_loop {% (: []) `fmap` $3 $2 }
+    | 'if' opt(ident) raw_if_result {% $3 $2 }
+
+raw_block :: { Maybe Ident -> Either String Instruction }
+    : 'end' opt(ident) {
+        \ident ->
+            if ident == $2 || isNothing $2
+            then Right $ BlockInstr ident [] []
+            else Left "Block labels have to match"
+    }
+    | raw_instr list(instruction) 'end' opt(ident) {
+        \ident ->
+            if ident == $4 || isNothing $4
+            then Right $ BlockInstr ident [] ($1 ++ concat $2)
+            else Left "Block labels have to match"
+    }
+    | '(' raw_block1 { $2 }
+
+raw_block1 :: { Maybe Ident -> Either String Instruction }
+    : 'result' valtype ')' list(instruction) 'end' opt(ident) {
+        \ident ->
+            if ident == $6 || isNothing $6
+            then Right $ BlockInstr ident [$2] (concat $4)
+            else Left "Block labels have to match"
+    }
+    | folded_instr1 list(instruction) 'end' opt(ident) {
+        \ident ->
+            if ident == $4 || isNothing $4
+            then Right $ BlockInstr ident [] ($1 ++ concat $2)
+            else Left "Block labels have to match"
+    }
+
+raw_loop :: { Maybe Ident -> Either String Instruction }
+    : 'end' opt(ident) {
+        \ident ->
+            if ident == $2 || isNothing $2
+            then Right $ LoopInstr ident [] []
+            else Left "Loop labels have to match"
+    }
+    | raw_instr list(instruction) 'end' opt(ident) {
+        \ident ->
+            if ident == $4 || isNothing $4
+            then Right $ LoopInstr ident [] ($1 ++ concat $2)
+            else Left "Loop labels have to match"
+    }
+    | '(' raw_loop1 { $2 }
+
+raw_loop1 :: { Maybe Ident -> Either String Instruction }
+    : 'result' valtype ')' list(instruction) 'end' opt(ident) {
+        \ident ->
+            if ident == $6 || isNothing $6
+            then Right $ LoopInstr ident [$2] (concat $4)
+            else Left "Loop labels have to match"
+    }
+    | folded_instr1 list(instruction) 'end' opt(ident) {
+        \ident ->
+            if ident == $4 || isNothing $4
+            then Right $ LoopInstr ident [] ($1 ++ concat $2)
+            else Left "Loop labels have to match"
+    }
+
+raw_if_result :: { Maybe Ident -> Either String [Instruction] }
+    : raw_else {
+        \ident ->
+            if ident == (snd $1) || isNothing (snd $1)
+            then Right [IfInstr ident [] [] $ fst $1]
+            else Left "If labels have to match"
+    }
+    | raw_instr list(instruction) raw_else {
+        \ident ->
+            if ident == (snd $3) || isNothing (snd $3)
+            then Right [IfInstr ident [] ($1 ++ concat $2) $ fst $3]
+            else Left "If labels have to match"
+    }
+    | '(' raw_if_result1 { $2 }
+
+raw_if_result1 :: { Maybe Ident -> Either String [Instruction] }
+    : 'result' valtype ')' list(instruction) raw_else {
+        \ident ->
+            if ident == (snd $5) || isNothing (snd $5)
+            then Right [IfInstr ident [$2] (concat $4) $ fst $5]
+            else Left "If labels have to match"
+    }
+    | folded_instr1 list(instruction) raw_else {
+        \ident ->
+            if ident == (snd $3) || isNothing (snd $3)
+            then Right [IfInstr ident [] ($1 ++ concat $2) $ fst $3]
+            else Left "If labels have to match"
+    }
+
+raw_else :: { ([Instruction], Maybe Ident) }
+    : 'end' opt(ident) { ([], $2) }
+    | 'else' opt(ident) list(instruction) 'end' opt(ident) {%
+        if matchIdents $2 $5
+        then Right (concat $3, if isNothing $2 then $5 else $2)
+        else Left "If labels have to match"
+    }
+
+raw_call_indirect :: { [Instruction] }
+    : '(' raw_call_indirect_typeuse { (PlainInstr $ CallIndirect $ fst $2) : snd $2 }
+    | {- empty -} { [PlainInstr $ CallIndirect $ AnonimousTypeUse $ FuncType [] []] }
+
+raw_call_indirect_typeuse :: { (TypeUse, [Instruction]) }
+    : 'type' index ')' raw_call_indirect_functype {
+        (IndexedTypeUse $2 $ fst $4, snd $4)
+    }
+    | raw_call_indirect_functype1 {
+        (AnonimousTypeUse $ fromMaybe (FuncType [] []) $ fst $1, snd $1)
+    }
+
+raw_call_indirect_functype :: { (Maybe FuncType, [Instruction]) }
+    : '(' raw_call_indirect_functype1 { $2 }
+    | {- empty -} { (Nothing, []) }
+
+raw_call_indirect_functype1 :: { (Maybe FuncType, [Instruction]) }
+    : 'param' list(valtype) ')' raw_call_indirect_functype {
+        let ft = fromMaybe emptyFuncType $ fst $4 in
+        (Just $ ft { params = map (ParamType Nothing) $2 ++ params ft }, snd $4)
+    }
+    | raw_call_indirect_return_functype1 { $1 }
+
+raw_call_indirect_return_functype :: { (Maybe FuncType, [Instruction]) }
+    : '(' raw_call_indirect_return_functype1 { $2 }
+    | {- empty -} { (Nothing, []) }
+
+raw_call_indirect_return_functype1 :: { (Maybe FuncType, [Instruction]) }
+    : 'result' list(valtype) ')' raw_call_indirect_return_functype {
+        let ft = fromMaybe emptyFuncType $ fst $4 in
+        (Just $ ft { results = $2 ++ results ft }, snd $4)
+    }
+    | folded_instr1 { (Nothing, $1) }
+
+folded_instr :: { [Instruction] }
+    : '(' folded_instr1 { $2 }
+
+folded_instr1 :: { [Instruction] }
+    : plaininstr list(folded_instr) ')' { concat $2 ++ [PlainInstr $1] }
+    | 'call_indirect' folded_call_indirect { $2 }
+    | 'block' opt(ident) folded_block { [$3 $2] }
+    | 'loop' opt(ident) folded_loop { [$3 $2] }
+    | 'if' opt(ident) '(' folded_if_result { $4 $2 }
+
+folded_block :: { Maybe Ident -> Instruction }
+    : ')' { \ident -> BlockInstr ident [] [] }
+    | '(' folded_block1 { $2 }
+    | raw_instr list(instruction) ')' { \ident -> BlockInstr ident [] ($1 ++ concat $2) }
+
+folded_block1 :: { Maybe Ident -> Instruction }
+    : 'result' valtype ')' list(instruction) ')' { \ident -> BlockInstr ident [$2] (concat $4) }
+    | folded_instr1 list(instruction) ')' { \ident -> BlockInstr ident [] ($1 ++ concat $2) }
+
+folded_loop :: { Maybe Ident -> Instruction }
+    : ')' { \ident -> LoopInstr ident [] [] }
+    | '(' folded_loop1 { $2 }
+    | raw_instr list(instruction) ')' { \ident -> LoopInstr ident [] ($1 ++ concat $2) }
+
+folded_loop1 :: { Maybe Ident -> Instruction }
+    : 'result' valtype ')' list(instruction) ')' { \ident -> LoopInstr ident [$2] (concat $4) }
+    | folded_instr1 list(instruction) ')' { \ident -> LoopInstr ident [] ($1 ++ concat $2) }
+
+folded_if_result :: { Maybe Ident -> [Instruction] }
+    : 'result' valtype ')' '(' folded_then_else {
+        \ident ->
+            let (pred, (trueBranch, falseBranch)) = $5 in
+            pred ++ [IfInstr ident [$2] trueBranch falseBranch]
+    }
+    | folded_then_else {
+        \ident ->
+            let (pred, (trueBranch, falseBranch)) = $1 in
+            pred ++ [IfInstr ident [] trueBranch falseBranch]
+    }
+
+folded_then_else :: { ([Instruction], ([Instruction], [Instruction])) }
+    : 'then' list(instruction) ')' folded_else { ([], (concat $2, $4)) }
+    | folded_instr1 '(' folded_then_else {
+        let (pred, branches) = $3 in
+        ($1 ++ pred, branches)
+    }
+
+folded_else :: { [Instruction] }
+    : ')' { [] }
+    | '(' 'else' list(instruction) ')' ')' { concat $3 }
+
+folded_call_indirect :: { [Instruction] }
+    : ')' { [PlainInstr $ CallIndirect $ AnonimousTypeUse $ FuncType [] []] }
+    | '(' folded_call_indirect_typeuse { snd $2 ++ [PlainInstr $ CallIndirect $ fst $2] }
+
+folded_call_indirect_typeuse :: { (TypeUse, [Instruction]) }
+    : 'type' index ')' folded_call_indirect_functype {
+        (IndexedTypeUse $2 $ fst $4, snd $4)
+    }
+    | folded_call_indirect_functype1 {
+        (AnonimousTypeUse $ fromMaybe (FuncType [] []) $ fst $1, snd $1)
+    }
+
+folded_call_indirect_functype :: { (Maybe FuncType, [Instruction]) }
+    : '(' folded_call_indirect_functype1 { $2 }
+    | ')' { (Nothing, []) }
+
+folded_call_indirect_functype1 :: { (Maybe FuncType, [Instruction]) }
+    : 'param' list(valtype) ')' folded_call_indirect_functype {
+        let ft = fromMaybe emptyFuncType $ fst $4 in
+        (Just $ ft { params = map (ParamType Nothing) $2 ++ params ft }, snd $4)
+    }
+    | folded_call_indirect_return_functype1 { $1 }
+
+folded_call_indirect_return_functype :: { (Maybe FuncType, [Instruction]) }
+    : '(' folded_call_indirect_return_functype1 { $2 }
+    | ')' { (Nothing, []) }
+
+folded_call_indirect_return_functype1 :: { (Maybe FuncType, [Instruction]) }
+    : 'result' list(valtype) ')' folded_call_indirect_return_functype {
+        let ft = fromMaybe emptyFuncType $ fst $4 in
+        (Just $ ft { results = $2 ++ results ft }, snd $4)
+    }
+    | folded_instr1 list(folded_instr) ')' { (Nothing, $1 ++ concat $2) }
+
+importdesc :: { ImportDesc }
+    : 'func' opt(ident) typeuse ')' { ImportFunc $2 $3 }
+    | 'table' opt(ident) tabletype ')' { ImportTable $2 $3 }
+    | 'memory' opt(ident) limits ')' { ImportMemory $2 $3 }
+    | 'global' opt(ident) globaltype ')' { ImportGlobal $2 $3 }
+
+import :: { Import }
+    : 'import' name name '(' importdesc ')' { Import [] $2 $3 $5 }
+
+-- FUNCTION --
+function :: { ModuleField }
+    : 'func' opt(ident) export_import_typeuse_locals_body { $3 $2 }
+
+export_import_typeuse_locals_body :: { Maybe Ident -> ModuleField }
+    : ')' { \i -> MFFunc emptyFunction { ident = i } }
+    | raw_instr list(instruction) ')' {
+        \i -> MFFunc emptyFunction { ident = i, body = $1 ++ concat $2 }
+    }
+    | '(' export_import_typeuse_locals_body1 { $2 }
+
+export_import_typeuse_locals_body1 :: { Maybe Ident -> ModuleField }
+    : 'export' name ')' export_import_typeuse_locals_body {
+        \ident ->
+            case $4 ident of
+                MFImport imp -> MFImport imp { reExportAs = $2 : reExportAs imp }
+                MFFunc func -> MFFunc func { exportFuncAs = $2 : exportFuncAs func }
+                _ -> error "unexpected field"
+    }
+    | import_typeuse_locals_body1 { $1 }
+
+import_typeuse_locals_body1 :: { Maybe Ident -> ModuleField }
+    : 'import' name name ')' typeuse ')' {
+        \ident -> MFImport $ Import [] $2 $3 $ ImportFunc ident $5
+    }
+    | typeuse_locals_body1 { MFFunc . $1 }
+
+typeuse_locals_body1 :: { Maybe Ident -> Function }
+    : 'type' index ')' signature_locals_body {
+        \i ->
+            let (AnonimousTypeUse signature) = funcType $4 in
+            let typeSign = if signature == emptyFuncType then Nothing else Just signature in
+            $4 { funcType = IndexedTypeUse $2 typeSign, ident = i }
+    }
+    | signature_locals_body1 { \i -> $1 { ident = i } }
+
+signature_locals_body :: { Function }
+    : ')' { emptyFunction }
+    | '(' signature_locals_body1 { $2 }
+
+signature_locals_body1 :: { Function }
+    : 'param' list(valtype) ')' signature_locals_body {
+        prependFuncParams (map (ParamType Nothing) $2) $4
+    }
+    | 'param' ident valtype ')' signature_locals_body {
+        prependFuncParams [ParamType (Just $2) $3] $5
+    }
+    | result_locals_body1 { $1 }
+
+result_locals_body :: { Function }
+    : ')' { emptyFunction }
+    | '(' result_locals_body1 { $2 }
+    | raw_instr list(instruction) ')' { emptyFunction { body = $1 ++ concat $2 } }
+
+result_locals_body1 :: { Function }
+    : 'result' list(valtype) ')' result_locals_body {
+        prependFuncResults $2 $4
+    }
+    | locals_body1 {
+        emptyFunction { locals = fst $1, body = snd $1 }
+    }
+
+locals_body :: { ([LocalType], [Instruction]) }
+    : ')' { ([], []) }
+    | raw_instr list(instruction) ')' { ([], $1 ++ concat $2)}
+    | '(' locals_body1 { $2 }
+
+locals_body1 :: { ([LocalType], [Instruction]) }
+    : 'local' list(valtype) ')' locals_body { (map (LocalType Nothing) $2 ++ fst $4, snd $4) }
+    | 'local' ident valtype ')' locals_body { (LocalType (Just $2) $3 : fst $5, snd $5) }
+    | folded_instr1 list(instruction) ')' { ([], $1 ++ concat $2) }
+
+-- FUNCTION END --
+
+-- GLOBAL --
+
+global :: { ModuleField }
+    : 'global' opt(ident) global_type_export_import { $3 $2 }
+
+globaltype :: { GlobalType }
+    : valtype { Const $1 }
+    | '(' 'mut' valtype ')' { Mut $3 }
+
+global_type_export_import :: { Maybe Ident -> ModuleField }
+    : valtype list(instruction) ')' { \ident -> MFGlobal $ Global [] ident (Const $1) $ concat $2 }
+    | '(' global_mut_export_import { $2 }
+
+global_mut_export_import :: { Maybe Ident -> ModuleField }
+    : 'mut' valtype ')' list(instruction) ')' { \ident -> MFGlobal $ Global [] ident (Mut $2) $ concat $4 }
+    | 'export' name ')' global_type_export_import {
+        \ident ->
+            case $4 ident of
+                MFImport imp -> MFImport imp { reExportAs = $2 : reExportAs imp }
+                MFGlobal global -> MFGlobal global { exportGlobalAs = $2 : exportGlobalAs global }
+                _ -> error "unexpected field"
+    }
+    | 'import' name name ')' globaltype ')' {
+        \ident -> MFImport $ Import [] $2 $3 $ ImportGlobal ident $5
+    }
+
+-- GLOBAL END --
+
+-- MEMORY --
+
+memory :: { [ModuleField] }
+    : 'memory' opt(ident) memory_limits_export_import { $3 $2 }
+
+memory_limits_export_import :: { Maybe Ident -> [ModuleField] }
+    : memory_limits { $1 }
+    | '(' memory_limits_export_import1 { $2 }
+
+datastring :: { LBS.ByteString }
+    : list(str) { LBS.concat $1 }
+
+memory_limits_export_import1 :: { Maybe Ident -> [ModuleField] }
+    : 'export' name ')' memory_limits_export_import {
+        \ident ->
+            case $4 ident of
+                [MFImport imp] -> [MFImport imp { reExportAs = $2 : reExportAs imp }]
+                (MFMem (Memory exps i l)):rest -> (MFMem (Memory ($2:exps) i l)):rest
+                _ -> error "unexpected field"
+    }
+    | 'import' name name ')' limits ')' {
+        \ident -> [MFImport $ Import [] $2 $3 $ ImportMemory ident $5]
+    }
+    | 'data' datastring ')' ')' {
+        \ident ->
+            let m = fromIntegral $ LBS.length $2 in
+            [
+                MFMem $ Memory [] ident $ Limit m $ Just m,
+                MFData $ DataSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] $2
+            ]
+    }
+
+memory_limits :: { Maybe Ident -> [ModuleField] }
+    : limits ')' { \ident -> [MFMem $ Memory [] ident $1] }
+
+-- MEMOTY END --
+
+-- TABLE --
+limits :: { Limit }
+    : u32 opt(u32) { Limit (fromIntegral $1) (fromIntegral `fmap` $2) }
+
+elemtype :: { ElemType }
+    : 'anyfunc' { AnyFunc }
+
+tabletype :: { TableType }
+    : limits elemtype { TableType $1 $2 }
+
+table :: { [ModuleField] }
+    : 'table' opt(ident) limits_elemtype_elem { $3 $2 }
+
+limits_elemtype_elem :: { Maybe Ident -> [ModuleField] }
+    : tabletype ')' { \ident -> [MFTable $ Table [] ident $1] }
+    | elemtype '(' 'elem' list(index) ')' ')' {
+        \ident ->
+            let funcsLen = fromIntegral $ length $4 in [
+                MFTable $ Table [] ident $ TableType (Limit funcsLen (Just funcsLen)) $1,
+                MFElem $ ElemSegment (fromMaybe (Index 0) $ Named `fmap` ident) [PlainInstr $ I32Const 0] $4
+            ]
+    }
+    | '(' import_export_table { $2 }
+
+import_export_table :: { Maybe Ident -> [ModuleField] }
+    : 'import' name name ')' tabletype ')' {
+        \ident -> [MFImport $ Import [] $2 $3 $ ImportTable ident $5]
+    }
+    | 'export' name ')' limits_elemtype_elem {
+        \ident ->
+            case $4 ident of
+                [MFImport imp] -> [MFImport imp { reExportAs = $2 : reExportAs imp }]
+                (MFTable (Table exps i t)):rest -> (MFTable (Table ($2:exps) i t)):rest
+                _ -> error "unexpected field"
+    }
+
+-- TABLE END --
+
+exportdesc :: { ExportDesc }
+    : 'func' index ')' { ExportFunc $2 }
+    | 'table' index ')' { ExportTable $2 }
+    | 'memory' index ')' { ExportMemory $2 }
+    | 'global' index ')' { ExportGlobal $2 }
+
+export :: { Export }
+    : 'export' name '(' exportdesc ')' { Export $2 $4 }
+
+start :: { StartFunction }
+    : 'start' index ')' { StartFunction $2 }
+
+-- TODO: Spec from 09 Jan 2018 declares 'offset' keyword as mandatory,
+-- but collection of testcases omits 'offset' in this position
+-- I am going to support both options for now, but maybe it has to be updated in future.
+offsetexpr :: { [Instruction] }
+    : 'offset' list(folded_instr) ')' { concat $2 }
+    | folded_instr1 { $1 }
+
+elemsegment :: { ElemSegment }
+    : 'elem' opt(index) '(' offsetexpr list(index) ')' { ElemSegment (fromMaybe (Index 0) $2) $4 $5 }
+
+datasegment :: { DataSegment }
+    : 'data' opt(index) '(' offsetexpr datastring ')' { DataSegment (fromMaybe (Index 0) $2) $4 $5 }
+
+modulefield1_single :: { ModuleField }
+    : typedef { MFType $1 }
+    | import { MFImport $1 }
+    | export { MFExport $1 }
+    | start { MFStart $1 }
+    | elemsegment { MFElem $1 }
+    | datasegment { MFData $1 }
+    | function { $1 }
+    | global { $1 }
+
+modulefield1_multi :: { [ModuleField] }
+    : table { $1 }
+    | memory { $1 }
+
+modulefield1 :: { [ModuleField] }
+    : modulefield1_single { [$1] }
+    | modulefield1_multi { $1 }
+
+modulefield :: { [ModuleField] }
+    : '(' modulefield1 { $2 }
+
+modAsFields :: { [ModuleField] }
+    : '(' 'module' list(modulefield) ')' EOF { concat $3 }
+    | '(' modulefield1 list(modulefield) EOF { $2 ++ concat $3}
+
+mod :: { S.Module }
+    : modAsFields {% desugarize $1 }
+
+-- Wasm Script Extended Grammar
+script :: { Script }
+    : list(command) EOF { $1 }
+
+command :: { Command }
+    : '(' command1 { $2 }
+
+command1 :: { Command }
+    : module1 { ModuleDef $1 }
+    | 'register' string opt(ident) ')' { Register $2 $3 }
+    | action1 { Action $1 }
+    | assertion1 { Assertion $1 }
+    | meta1 { Meta $1 }
+
+module1 :: { ModuleDef }
+    : 'module' opt(ident) 'binary' datastring ')' { BinaryModDef $2 $4 }
+    | 'module' opt(ident) 'quote' list(string) ')' { TextModDef $2 (TL.concat $4) }
+    | 'module' opt(ident) list(modulefield) ')' {% RawModDef $2 `fmap` (desugarize $ concat $3) }
+    | modulefield1 list(modulefield) {% RawModDef Nothing `fmap` (desugarize $ $1 ++ concat $2) }
+
+action1 :: { Action }
+    : 'invoke' opt(ident) string list(folded_instr) ')' { Invoke $2 $3 (map (map constInstructionToValue) $4) }
+    | 'get' opt(ident) string ')' { Get $2 $3 }
+
+assertion1 :: { Assertion }
+    : 'assert_return' '(' action1 list(folded_instr) ')' { AssertReturn $3 (map (map constInstructionToValue) $4) }
+    | 'assert_return_canonical_nan' '(' action1 ')' { AssertReturnCanonicalNaN $3 }
+    | 'assert_return_arithmetic_nan' '(' action1 ')' { AssertReturnArithmeticNaN $3 }
+    | 'assert_trap' '(' assertion_trap string ')' { AssertTrap $3 $4 }
+    | 'assert_malformed' '(' module1 string ')' { AssertMalformed $3 $4 }
+    | 'assert_invalid' '(' module1 string ')' { AssertInvalid $3 $4 }
+    | 'assert_unlinkable' '(' module1 string ')' { AssertUnlinkable $3 $4 }
+    | 'assert_exhaustion' '(' action1 string ')' { AssertExhaustion $3 $4 }
+
+assertion_trap :: { Either Action ModuleDef }
+    : action1 { Left $1 }
+    | module1 { Right $1 }
+
+meta1 :: { Meta }
+    : 'script' opt(ident) script ')' { Script $2 $3 }
+    | 'input' opt(ident) string ')' { Input $2 $3 }
+    | 'output' opt(ident) string ')' { Output $2 $3 }
+
+-- utils
+
+rev_list(p)
+    : rev_list(p) p  { $2 : $1 }
+    | {- empty -}    { [] }
+
+rev_list1(p)
+    : rev_list1(p) p { $2 : $1 }
+    | p              { [$1] }
+
+list(p)
+    : rev_list(p)    { reverse $1 }
+
+opt(p)
+    : p { Just $1 }
+    | {- empty -} { Nothing }
+
+{
+
+-- partial function by intention
+prependFuncParams :: [ParamType] -> Function -> Function
+prependFuncParams prep f@(Function { funcType = AnonimousTypeUse ft }) =
+    f { funcType = AnonimousTypeUse $ ft { params = prep ++ params ft } }
+
+prependFuncResults :: [ValueType] -> Function -> Function
+prependFuncResults prep f@(Function { funcType = AnonimousTypeUse ft }) =
+    f { funcType = AnonimousTypeUse $ ft { results = prep ++ results ft } }
+
+mergeFuncType :: FuncType -> FuncType -> FuncType
+mergeFuncType (FuncType lps lrs) (FuncType rps rrs) = FuncType (lps ++ rps) (lrs ++ rrs)
+
+matchIdents :: Maybe Ident -> Maybe Ident -> Bool
+matchIdents Nothing _ = True
+matchIdents _ Nothing = True
+matchIdents a b = a == b
+
+asOffset :: LBS.ByteString -> Maybe Natural
+asOffset str = do
+    num <- TL.stripPrefix "offset=" $ TLEncoding.decodeUtf8 str
+    fromIntegral . fst <$> eitherToMaybe (TLRead.decimal num)
+
+asAlign :: LBS.ByteString -> Maybe Natural
+asAlign str = do
+    num <- TL.stripPrefix "align=" $ TLEncoding.decodeUtf8 str
+    fromIntegral . fst <$> eitherToMaybe (TLRead.decimal num)
+
+parseMemArg :: Natural -> Maybe Natural -> Maybe Natural -> Either String MemArg
+parseMemArg defAlign optOffset optAlign = do
+    let offset = fromMaybe 0 optOffset
+    let parsedAlign = fromIntegral $ fromMaybe defAlign optAlign
+    if parsedAlign == 0 then Left "alignment" else return ()
+    let align = fromIntegral $ round $ logBase 2 parsedAlign
+    if 2 ^ align /= parsedAlign then Left "alignment" else return ()
+    if offset >= 2 ^ 32 || align >= 2 ^ 32
+    then Left "u32 is out of boundaries"
+    else return $ MemArg offset align
+
+eitherToMaybe :: Either left right -> Maybe right
+eitherToMaybe = either (const Nothing) Just
+
+integerToWord32 :: Integer -> Word32
+integerToWord32 i
+    | i >= 0 && i <= 2 ^ 32 = fromIntegral i
+    | i < 0 && i >= -(2 ^ 31) = 0xFFFFFFFF - (fromIntegral (abs i)) + 1
+    | otherwise = error "I32 is out of bounds."
+
+integerToWord64 :: Integer -> Word64
+integerToWord64 i
+    | i >= 0 && i <= 2 ^ 64 = fromIntegral i
+    | i < 0 && i >= -(2 ^ 63) = 0xFFFFFFFFFFFFFFFF - (fromIntegral (abs i)) + 1
+    | otherwise = error "I64 is out of bounds."
+
+data FuncType = FuncType { params :: [ParamType], results :: [ValueType] } deriving (Show, Eq, Generic, NFData)
+
+emptyFuncType :: FuncType
+emptyFuncType = FuncType [] []
+
+data ParamType = ParamType {
+        ident :: Maybe Ident,
+        paramType :: ValueType
+    } deriving (Show, Eq, Generic, NFData)
+
+newtype Ident = Ident TL.Text deriving (Show, Eq, Generic, NFData)
+
+data Index = Named Ident | Index Natural deriving (Show, Eq, Generic, NFData)
+
+type LabelIndex = Index
+type FuncIndex = Index
+type TypeIndex = Index
+type LocalIndex = Index
+type GlobalIndex = Index
+type TableIndex = Index
+type MemoryIndex = Index
+
+data PlainInstr =
+    -- Control instructions
+    Unreachable
+    | Nop
+    | Br LabelIndex
+    | BrIf LabelIndex
+    | BrTable [LabelIndex] LabelIndex
+    | Return
+    | Call FuncIndex
+    | CallIndirect TypeUse
+    -- Parametric instructions
+    | Drop
+    | Select
+    -- Variable instructions
+    | GetLocal LocalIndex
+    | SetLocal LocalIndex
+    | TeeLocal LocalIndex
+    | GetGlobal GlobalIndex
+    | SetGlobal GlobalIndex
+    -- Memory instructions
+    | I32Load MemArg
+    | I64Load MemArg
+    | F32Load MemArg
+    | F64Load MemArg
+    | I32Load8S MemArg
+    | I32Load8U MemArg
+    | I32Load16S MemArg
+    | I32Load16U MemArg
+    | I64Load8S MemArg
+    | I64Load8U MemArg
+    | I64Load16S MemArg
+    | I64Load16U MemArg
+    | I64Load32S MemArg
+    | I64Load32U MemArg
+    | I32Store MemArg
+    | I64Store MemArg
+    | F32Store MemArg
+    | F64Store MemArg
+    | I32Store8 MemArg
+    | I32Store16 MemArg
+    | I64Store8 MemArg
+    | I64Store16 MemArg
+    | I64Store32 MemArg
+    | CurrentMemory
+    | GrowMemory
+    -- Numeric instructions
+    | I32Const Integer
+    | I64Const Integer
+    | F32Const Float
+    | F64Const Double
+    | IUnOp BitSize IUnOp
+    | IBinOp BitSize IBinOp
+    | I32Eqz
+    | I64Eqz
+    | IRelOp BitSize IRelOp
+    | FUnOp BitSize FUnOp
+    | FBinOp BitSize FBinOp
+    | FRelOp BitSize FRelOp
+    | I32WrapI64
+    | ITruncFU {- Int Size -} BitSize {- Float Size -} BitSize
+    | ITruncFS {- Int Size -} BitSize {- Float Size -} BitSize
+    | I64ExtendSI32
+    | I64ExtendUI32
+    | FConvertIU {- Float Size -} BitSize {- Int Size -} BitSize
+    | FConvertIS {- Float Size -} BitSize {- Int Size -} BitSize
+    | F32DemoteF64
+    | F64PromoteF32
+    | IReinterpretF BitSize
+    | FReinterpretI BitSize
+    deriving (Show, Eq, Generic, NFData)
+
+data TypeDef = TypeDef (Maybe Ident) FuncType deriving (Show, Eq, Generic, NFData)
+
+data TypeUse =
+    IndexedTypeUse TypeIndex (Maybe FuncType)
+    | AnonimousTypeUse FuncType
+    deriving (Show, Eq, Generic, NFData)
+
+data Instruction =
+    PlainInstr PlainInstr
+    | BlockInstr {
+        label :: Maybe Ident,
+        resultType :: [ValueType],
+        body :: [Instruction]
+    }
+    | LoopInstr {
+        label :: Maybe Ident,
+        resultType :: [ValueType],
+        body :: [Instruction]
+    }
+    | IfInstr {
+        label :: Maybe Ident,
+        resultType :: [ValueType],
+        trueBranch :: [Instruction],
+        falseBranch :: [Instruction]
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data Import = Import {
+        reExportAs :: [TL.Text],
+        sourceModule :: TL.Text,
+        name :: TL.Text,
+        desc :: ImportDesc
+    } deriving (Show, Eq, Generic, NFData)
+
+data ImportDesc =
+    ImportFunc (Maybe Ident) TypeUse
+    | ImportTable (Maybe Ident) TableType
+    | ImportMemory (Maybe Ident) Limit
+    | ImportGlobal (Maybe Ident) GlobalType
+    deriving (Show, Eq, Generic, NFData)
+
+data LocalType = LocalType {
+        ident :: Maybe Ident,
+        localType :: ValueType
+    } deriving (Show, Eq, Generic, NFData)
+
+data Function = Function {
+        exportFuncAs :: [TL.Text],
+        ident :: Maybe Ident,
+        funcType :: TypeUse,
+        locals :: [LocalType],
+        body :: [Instruction]
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+emptyFunction :: Function
+emptyFunction =
+    Function {
+        exportFuncAs = [],
+        ident = Nothing,
+        funcType = AnonimousTypeUse emptyFuncType,
+        locals = [],
+        body = []
+    }
+
+data Global = Global {
+        exportGlobalAs :: [TL.Text],
+        ident :: Maybe Ident,
+        globalType :: GlobalType,
+        initializer :: [Instruction]
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data Memory = Memory [TL.Text] (Maybe Ident) Limit deriving (Show, Eq, Generic, NFData)
+
+data Table = Table [TL.Text] (Maybe Ident) TableType deriving (Show, Eq, Generic, NFData)
+
+data ExportDesc =
+    ExportFunc FuncIndex
+    | ExportTable TableIndex
+    | ExportMemory MemoryIndex
+    | ExportGlobal GlobalIndex
+    deriving (Show, Eq, Generic, NFData)
+
+data Export = Export {
+        name :: TL.Text,
+        desc :: ExportDesc
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data StartFunction = StartFunction FuncIndex deriving (Show, Eq, Generic, NFData)
+
+data ElemSegment = ElemSegment {
+        tableIndex :: TableIndex,
+        offset :: [Instruction],
+        funcIndexes :: [FuncIndex]
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data DataSegment = DataSegment {
+        memIndex :: MemoryIndex,
+        offset :: [Instruction],
+        datastring :: LBS.ByteString
+    }
+    deriving (Show, Eq, Generic, NFData)
+
+data ModuleField =
+    MFType TypeDef
+    | MFImport Import
+    | MFFunc Function
+    | MFTable Table
+    | MFMem Memory
+    | MFGlobal Global
+    | MFExport Export
+    | MFStart StartFunction
+    | MFElem ElemSegment
+    | MFData DataSegment
+    deriving(Show, Eq, Generic, NFData)
+
+happyError (Lexeme _ EOF : []) = Left $ "Error occuried during parsing phase at the end of file"
+happyError (Lexeme Nothing tok : tokens) = Left $ "Error occuried during parsing phase at the end of file"
+happyError (Lexeme (Just (AlexPn abs line col)) tok : tokens) = Left $
+    "Error occuried during parsing phase. " ++
+    "Line " ++ show line ++ ", " ++
+    "Column " ++ show col ++ ", " ++
+    "Token " ++ show tok ++ ". " ++
+    "Token lookahed: " ++ show (take 3 tokens)
+
+data Module = Module {
+    types :: [TypeDef],
+    functions :: [Function],
+    tables :: [Table],
+    mems :: [Memory],
+    globals :: [Global],
+    elems :: [ElemSegment],
+    datas :: [DataSegment],
+    start :: Maybe StartFunction,
+    imports :: [Import],
+    exports :: [Export]
+} deriving (Show, Eq)
+
+type Script = [Command]
+
+data ModuleDef
+    = RawModDef (Maybe Ident) S.Module
+    | TextModDef (Maybe Ident) TL.Text
+    | BinaryModDef (Maybe Ident) LBS.ByteString
+    deriving (Show, Eq)
+
+data Command
+    = ModuleDef ModuleDef
+    | Register TL.Text (Maybe Ident)
+    | Action Action
+    | Assertion Assertion
+    | Meta Meta
+    deriving (Show, Eq)
+
+data Action
+    = Invoke (Maybe Ident) TL.Text [S.Expression]
+    | Get (Maybe Ident) TL.Text
+    deriving (Show, Eq)
+
+type FailureString = TL.Text
+
+data Assertion
+    = AssertReturn Action [S.Expression]
+    | AssertReturnCanonicalNaN Action
+    | AssertReturnArithmeticNaN Action
+    | AssertTrap (Either Action ModuleDef) FailureString
+    | AssertMalformed ModuleDef FailureString
+    | AssertInvalid ModuleDef FailureString
+    | AssertUnlinkable ModuleDef FailureString
+    | AssertExhaustion Action FailureString
+    deriving (Show, Eq)
+
+data Meta
+    = Script (Maybe Ident) Script
+    | Input (Maybe Ident) TL.Text
+    | Output (Maybe Ident) TL.Text
+    deriving (Show, Eq)
+
+type Labels = [Maybe Ident]
+
+data FunCtx = FunCtx {
+    ctxMod :: Module,
+    ctxLabels :: Labels,
+    ctxLocals :: [LocalType],
+    ctxParams :: [ParamType]
+} deriving (Eq, Show)
+
+constInstructionToValue :: Instruction -> S.Instruction Natural
+constInstructionToValue (PlainInstr (I32Const v)) = S.I32Const $ integerToWord32 v
+constInstructionToValue (PlainInstr (F32Const v)) = S.F32Const v
+constInstructionToValue (PlainInstr (I64Const v)) = S.I64Const $ integerToWord64 v
+constInstructionToValue (PlainInstr (F64Const v)) = S.F64Const v
+constInstructionToValue _ = error "Only const instructions supported as arguments for actions"
+
+desugarize :: [ModuleField] -> Either String S.Module
+desugarize fields = do
+    checkImportsOrder fields
+    let mod = Module {
+        types = reverse $ foldl' extractTypeDef (reverse $ explicitTypeDefs fields) fields,
+        functions = extract extractFunction fields,
+        tables = extract extractTable fields,
+        imports = extract extractImport fields,
+        mems = extract extractMemory fields,
+        globals = extract extractGlobal fields,
+        elems = extract extractElemSegment fields,
+        datas = extract extractDataSegment fields,
+        start = extractStart fields,
+        exports = []
+    }
+    funs <- mapM (synFunctionToStruct mod) $ functions mod
+    elements <- mapM (synElemToStruct mod) $ elems mod
+    segments <- mapM (synDataToStruct mod) $ datas mod
+    globs <- mapM (synGlobalToStruct mod) $ globals mod
+    return S.Module {
+        S.types = map synTypeDefToStruct $ types mod,
+        S.functions = funs,
+        S.tables = map synTableToStruct $ tables mod,
+        S.imports = map (synImportToStruct $ types mod) $ imports mod,
+        S.elems = elements,
+        S.datas = segments,
+        S.mems = map synMemoryToStruct $ mems mod,
+        S.globals = globs,
+        S.start = fmap (synStartToStruct mod) $ start mod,
+        S.exports = synExportsToStruct mod $ extractExports mod fields
+    }
+    where
+        -- utils
+        extract :: ([a] -> ModuleField -> [a]) -> [ModuleField] -> [a]
+        extract extractor = reverse . foldl' extractor []
+
+        findWithIndex :: (a -> Bool) -> [a] -> Maybe (a, Int)
+        findWithIndex pred l = find (pred . fst) $ zip l [0..]
+
+        -- types
+        synTypeDefToStruct :: TypeDef -> S.FuncType
+        synTypeDefToStruct (TypeDef _ FuncType { params, results }) =
+            S.FuncType (map paramType params) results
+
+        explicitTypeDefs :: [ModuleField] -> [TypeDef]
+        explicitTypeDefs = map (\(MFType def) -> def) . filter isTypeDef
+            where
+                isTypeDef (MFType _) = True
+                isTypeDef _ = False
+        
+        checkImportsOrder :: [ModuleField] -> Either String ()
+        checkImportsOrder fields = foldM checkDef False fields >> return ()
+            where
+                checkDef nonImportOccured (MFImport _) =
+                    if nonImportOccured
+                    then Left "Import sections have to be before any definition"
+                    else Right False
+                checkDef _ (MFFunc _) = return True
+                checkDef _ (MFGlobal _) = return True
+                checkDef _ (MFMem _) = return True
+                checkDef _ (MFTable _) = return True
+                checkDef nonImportOccured _ = return nonImportOccured
+
+        extractTypeDef :: [TypeDef] -> ModuleField -> [TypeDef]
+        extractTypeDef defs (MFType _) = defs -- should be extracted before implicit defs
+        extractTypeDef defs (MFImport Import { desc = ImportFunc _ typeUse }) =
+            matchTypeUse defs typeUse
+        extractTypeDef defs (MFFunc Function { funcType, body }) =
+            extractTypeDefFromInstructions (matchTypeUse defs funcType) body
+        extractTypeDef defs (MFGlobal Global { initializer }) =
+            extractTypeDefFromInstructions defs initializer
+        extractTypeDef defs (MFElem ElemSegment { offset }) =
+            extractTypeDefFromInstructions defs offset
+        extractTypeDef defs (MFData DataSegment { offset }) =
+            extractTypeDefFromInstructions defs offset
+        extractTypeDef defs _ = defs
+
+        extractTypeDefFromInstructions :: [TypeDef] -> [Instruction] -> [TypeDef]
+        extractTypeDefFromInstructions = foldl' extractTypeDefFromInstruction
+
+        extractTypeDefFromInstruction :: [TypeDef] -> Instruction -> [TypeDef]
+        extractTypeDefFromInstruction defs (PlainInstr (CallIndirect typeUse)) =
+            matchTypeUse defs typeUse
+        extractTypeDefFromInstruction defs (BlockInstr { body }) =
+            extractTypeDefFromInstructions defs body
+        extractTypeDefFromInstruction defs (LoopInstr { body }) =
+            extractTypeDefFromInstructions defs body
+        extractTypeDefFromInstruction defs (IfInstr { trueBranch, falseBranch }) =
+            extractTypeDefFromInstructions defs $ trueBranch ++ falseBranch
+        extractTypeDefFromInstruction defs _ = defs
+
+        funcTypesEq :: FuncType -> FuncType -> Bool
+        funcTypesEq l r =
+            let paramTypes = map paramType . params in
+            paramTypes l == paramTypes r && results l == results r
+
+        matchTypeFunc :: FuncType -> TypeDef -> Bool
+        matchTypeFunc funcType (TypeDef _ ft) = funcTypesEq ft funcType
+
+        matchTypeUse :: [TypeDef] -> TypeUse -> [TypeDef]
+        matchTypeUse defs (AnonimousTypeUse funcType) =
+            if any (matchTypeFunc funcType) defs
+            then defs
+            else (TypeDef Nothing funcType) : defs
+        matchTypeUse defs _ = defs
+
+        getTypeIndex :: [TypeDef] -> TypeUse -> Maybe Natural
+        getTypeIndex defs (AnonimousTypeUse funcType) =
+            fromIntegral <$> findIndex (matchTypeFunc funcType) defs
+        getTypeIndex defs (IndexedTypeUse (Named ident) (Just funcType)) = do
+            (def, idx) <- findWithIndex (\(TypeDef i _) -> i == Just ident) defs
+            guard $ matchTypeFunc funcType def
+            return $ fromIntegral idx
+        getTypeIndex defs (IndexedTypeUse (Named ident) Nothing) =
+            fromIntegral <$> findIndex (\(TypeDef i _) -> i == Just ident) defs
+        getTypeIndex defs (IndexedTypeUse (Index n) (Just funcType)) = do
+            guard $ matchTypeFunc funcType $ defs !! fromIntegral n
+            return n
+        getTypeIndex defs (IndexedTypeUse (Index n) Nothing) = return n
+        
+        -- imports
+        synImportToStruct :: [TypeDef] -> Import -> S.Import
+        synImportToStruct defs (Import _ mod name (ImportFunc _ typeUse)) =
+            case getTypeIndex defs typeUse of
+                Just idx -> S.Import mod name $ S.ImportFunc idx
+                Nothing -> error $ "cannot find type index for function import: " ++ show typeUse
+        synImportToStruct _ (Import _ mod name (ImportTable _ tableType)) =
+            S.Import mod name $ S.ImportTable tableType
+        synImportToStruct _ (Import _ mod name (ImportMemory _ limit)) =
+            S.Import mod name $ S.ImportMemory limit
+        synImportToStruct _ (Import _ mod name (ImportGlobal _ globalType)) =
+            S.Import mod name $ S.ImportGlobal globalType
+
+        extractImport :: [Import] -> ModuleField -> [Import]
+        extractImport imports (MFImport imp) = imp : imports
+        extractImport imports _ = imports
+
+        unwrapLabel ctx labelIdx =
+            case getLabelIdx ctx labelIdx of
+                Just i -> Right i
+                Nothing -> Left "unknown label"
+
+        -- functions
+        synInstrToStruct :: FunCtx -> Instruction -> Either String (S.Instruction Natural)
+        synInstrToStruct _ (PlainInstr Unreachable) = return S.Unreachable
+        synInstrToStruct _ (PlainInstr Nop) = return S.Nop
+        synInstrToStruct ctx (PlainInstr (Br labelIdx)) =
+            S.Br <$> unwrapLabel ctx labelIdx
+        synInstrToStruct ctx (PlainInstr (BrIf labelIdx)) =
+            S.BrIf <$> unwrapLabel ctx labelIdx
+        synInstrToStruct ctx (PlainInstr (BrTable lbls lbl)) = do
+            labels <- mapM (unwrapLabel ctx) lbls
+            S.BrTable labels <$> unwrapLabel ctx lbl
+        synInstrToStruct _ (PlainInstr Return) = return S.Return
+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (Call funIdx)) =
+            case getFuncIndex ctxMod funIdx of
+                Just idx -> return $ S.Call idx
+                Nothing -> Left "unknown function"
+        synInstrToStruct FunCtx { ctxMod = Module { types } } (PlainInstr (CallIndirect typeUse)) =
+            case getTypeIndex types typeUse of
+                Just idx -> return $ S.CallIndirect idx
+                Nothing -> Left "unknown type"
+        synInstrToStruct _ (PlainInstr Drop) = return $ S.Drop
+        synInstrToStruct _ (PlainInstr Select) = return $ S.Select
+        synInstrToStruct ctx (PlainInstr (GetLocal localIdx)) =
+            case getLocalIndex ctx localIdx of
+                Just idx -> return $ S.GetLocal idx
+                Nothing -> Left "unknown local"
+        synInstrToStruct ctx (PlainInstr (SetLocal localIdx)) =
+            case getLocalIndex ctx localIdx of
+                Just idx -> return $ S.SetLocal idx
+                Nothing -> Left "unknown local"
+        synInstrToStruct ctx (PlainInstr (TeeLocal localIdx)) =
+            case getLocalIndex ctx localIdx of
+                Just idx -> return $ S.TeeLocal idx
+                Nothing -> Left "unknown local"
+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (GetGlobal globalIdx)) =
+            case getGlobalIndex ctxMod globalIdx of
+                Just idx -> return $ S.GetGlobal idx
+                Nothing -> Left "unknown global"
+        synInstrToStruct FunCtx { ctxMod } (PlainInstr (SetGlobal globalIdx)) =
+            case getGlobalIndex ctxMod globalIdx of
+                Just idx -> return $ S.SetGlobal idx
+                Nothing -> Left "unknown global"
+        synInstrToStruct _ (PlainInstr (I32Load memArg)) = return $ S.I32Load memArg
+        synInstrToStruct _ (PlainInstr (I64Load memArg)) = return $ S.I64Load memArg
+        synInstrToStruct _ (PlainInstr (F32Load memArg)) = return $ S.F32Load memArg
+        synInstrToStruct _ (PlainInstr (F64Load memArg)) = return $ S.F64Load memArg
+        synInstrToStruct _ (PlainInstr (I32Load8S memArg)) = return $ S.I32Load8S memArg
+        synInstrToStruct _ (PlainInstr (I32Load8U memArg)) = return $ S.I32Load8U memArg
+        synInstrToStruct _ (PlainInstr (I32Load16S memArg)) = return $ S.I32Load16S memArg
+        synInstrToStruct _ (PlainInstr (I32Load16U memArg)) = return $ S.I32Load16U memArg
+        synInstrToStruct _ (PlainInstr (I64Load8S memArg)) = return $ S.I64Load8S memArg
+        synInstrToStruct _ (PlainInstr (I64Load8U memArg)) = return $ S.I64Load8U memArg
+        synInstrToStruct _ (PlainInstr (I64Load16S memArg)) = return $ S.I64Load16S memArg
+        synInstrToStruct _ (PlainInstr (I64Load16U memArg)) = return $ S.I64Load16U memArg
+        synInstrToStruct _ (PlainInstr (I64Load32S memArg)) = return $ S.I64Load32S memArg
+        synInstrToStruct _ (PlainInstr (I64Load32U memArg)) = return $ S.I64Load32U memArg
+        synInstrToStruct _ (PlainInstr (I32Store memArg)) = return $ S.I32Store memArg
+        synInstrToStruct _ (PlainInstr (I64Store memArg)) = return $ S.I64Store memArg
+        synInstrToStruct _ (PlainInstr (F32Store memArg)) = return $ S.F32Store memArg
+        synInstrToStruct _ (PlainInstr (F64Store memArg)) = return $ S.F64Store memArg
+        synInstrToStruct _ (PlainInstr (I32Store8 memArg)) = return $ S.I32Store8 memArg
+        synInstrToStruct _ (PlainInstr (I32Store16 memArg)) = return $ S.I32Store16 memArg
+        synInstrToStruct _ (PlainInstr (I64Store8 memArg)) = return $ S.I64Store8 memArg
+        synInstrToStruct _ (PlainInstr (I64Store16 memArg)) = return $ S.I64Store16 memArg
+        synInstrToStruct _ (PlainInstr (I64Store32 memArg)) = return $ S.I64Store32 memArg
+        synInstrToStruct _ (PlainInstr CurrentMemory) = return $ S.CurrentMemory
+        synInstrToStruct _ (PlainInstr GrowMemory) = return $ S.GrowMemory
+        synInstrToStruct _ (PlainInstr (I32Const val)) = return $ S.I32Const $ integerToWord32 val
+        synInstrToStruct _ (PlainInstr (I64Const val)) = return $ S.I64Const $ integerToWord64 val
+        synInstrToStruct _ (PlainInstr (F32Const val)) = return $ S.F32Const val
+        synInstrToStruct _ (PlainInstr (F64Const val)) = return $ S.F64Const val
+        synInstrToStruct _ (PlainInstr (IUnOp sz op)) = return $ S.IUnOp sz op
+        synInstrToStruct _ (PlainInstr (IBinOp sz op)) = return $ S.IBinOp sz op
+        synInstrToStruct _ (PlainInstr I32Eqz) = return $ S.I32Eqz
+        synInstrToStruct _ (PlainInstr I64Eqz) = return $ S.I64Eqz
+        synInstrToStruct _ (PlainInstr (IRelOp sz op)) = return $ S.IRelOp sz op
+        synInstrToStruct _ (PlainInstr (FUnOp sz op)) = return $ S.FUnOp sz op
+        synInstrToStruct _ (PlainInstr (FBinOp sz op)) = return $ S.FBinOp sz op
+        synInstrToStruct _ (PlainInstr (FRelOp sz op)) = return $ S.FRelOp sz op
+        synInstrToStruct _ (PlainInstr I32WrapI64) = return $ S.I32WrapI64
+        synInstrToStruct _ (PlainInstr (ITruncFU sz sz')) = return $ S.ITruncFU sz sz'
+        synInstrToStruct _ (PlainInstr (ITruncFS sz sz')) = return $ S.ITruncFS sz sz'
+        synInstrToStruct _ (PlainInstr I64ExtendSI32) = return $ S.I64ExtendSI32
+        synInstrToStruct _ (PlainInstr I64ExtendUI32) = return $ S.I64ExtendUI32
+        synInstrToStruct _ (PlainInstr (FConvertIU sz sz')) = return $ S.FConvertIU sz sz'
+        synInstrToStruct _ (PlainInstr (FConvertIS sz sz')) = return $ S.FConvertIS sz sz'
+        synInstrToStruct _ (PlainInstr F32DemoteF64) = return $ S.F32DemoteF64
+        synInstrToStruct _ (PlainInstr F64PromoteF32) = return $ S.F64PromoteF32
+        synInstrToStruct _ (PlainInstr (IReinterpretF sz)) = return $ S.IReinterpretF sz
+        synInstrToStruct _ (PlainInstr (FReinterpretI sz)) = return $ S.FReinterpretI sz
+        synInstrToStruct ctx BlockInstr {label, resultType, body} =
+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx } in
+            S.Block resultType <$> mapM (synInstrToStruct ctx') body
+        synInstrToStruct ctx LoopInstr {label, resultType, body} =
+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx } in
+            S.Loop resultType <$> mapM (synInstrToStruct ctx') body
+        synInstrToStruct ctx IfInstr {label, resultType, trueBranch, falseBranch} = do
+            let ctx' = ctx { ctxLabels = label : ctxLabels ctx }
+            trueBranch' <- mapM (synInstrToStruct ctx') trueBranch
+            falseBranch' <- mapM (synInstrToStruct ctx') falseBranch
+            return $ S.If resultType trueBranch' falseBranch'
+        
+        synFunctionToStruct :: Module -> Function -> Either String S.Function
+        synFunctionToStruct mod Function { funcType, locals, body } = do
+            typeIdx <- (
+                    case getTypeIndex (types mod) funcType of
+                        Just idx -> Right idx
+                        Nothing -> Left "Type was not found or type signature doesn't match with type"
+                )
+            -- we have to use local func params declaration,
+            -- coz it can contain own names for them
+            let
+                params = case funcType of
+                    IndexedTypeUse _ (Just FuncType { params }) -> params
+                    AnonimousTypeUse FuncType { params } -> params
+                    _ ->
+                        if fromIntegral typeIdx < length (types mod)
+                        then let TypeDef _ FuncType { params } = types mod !! fromIntegral typeIdx in params
+                        else []
+            let ctx = FunCtx mod [] locals params
+            instructions <- mapM (synInstrToStruct ctx) body
+            return S.Function {
+                S.funcType = typeIdx,
+                S.localTypes = map localType locals,
+                S.body = instructions
+            }
+
+        extractFunction :: [Function] -> ModuleField -> [Function]
+        extractFunction funcs (MFFunc fun) = fun : funcs
+        extractFunction funcs _ = funcs
+
+        getLabelIdx :: FunCtx -> LabelIndex -> Maybe Natural
+        getLabelIdx FunCtx { ctxLabels } (Named id) =
+            fromIntegral <$> findIndex (\ident -> ident == Just id) ctxLabels
+        getLabelIdx FunCtx { ctxLabels } (Index idx) =
+            Just idx
+        
+        getLocalIndex :: FunCtx -> LabelIndex -> Maybe Natural
+        getLocalIndex FunCtx {ctxParams, ctxLocals} (Named id) =
+            case findIndex (\(ParamType ident _) -> ident == Just id) ctxParams of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (LocalType ident _) = ident == Just id in
+                    fromIntegral . (+ length ctxParams) <$> findIndex isIdent ctxLocals
+        getLocalIndex FunCtx {ctxParams, ctxLocals} (Index idx) = Just idx
+        
+        isFuncImport :: Import -> Bool
+        isFuncImport Import { desc = ImportFunc _ _ } = True
+        isFuncImport _ = False
+
+        getFuncIndex :: Module -> FuncIndex -> Maybe Natural
+        getFuncIndex Module { imports, functions } (Named id) =
+            let funImports = filter isFuncImport imports in
+            case findIndex (\(Import { desc = ImportFunc ident _ }) -> ident == Just id) funImports of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (Function { ident }) = ident == Just id in
+                    fromIntegral . (+ length funImports) <$> findIndex isIdent functions
+        getFuncIndex Module { imports, functions } (Index idx) = Just idx
+
+        -- tables
+        synTableToStruct :: Table -> S.Table
+        synTableToStruct (Table _ _ tableType) = S.Table tableType
+
+        extractTable :: [Table] -> ModuleField -> [Table]
+        extractTable tables (MFTable table) = table : tables
+        extractTable tables _ = tables
+
+        isTableImport :: Import -> Bool
+        isTableImport Import { desc = ImportTable _ _ } = True
+        isTableImport _ = False
+
+        getTableIndex :: Module -> TableIndex -> Maybe Natural
+        getTableIndex Module { imports, tables } (Named id) =
+            let tableImports = filter isTableImport imports in
+            case findIndex (\(Import { desc = ImportTable ident _ }) -> ident == Just id) tableImports of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (Table _ (Just id) _) = True in
+                    fromIntegral . (+ length tableImports) <$> findIndex isIdent tables
+        getTableIndex Module { imports, tables } (Index idx) = Just idx
+
+        -- memory
+        synMemoryToStruct :: Memory -> S.Memory
+        synMemoryToStruct (Memory _ _ limits) = S.Memory limits
+
+        extractMemory :: [Memory] -> ModuleField -> [Memory]
+        extractMemory mems (MFMem mem) = mem : mems
+        extractMemory mems _ = mems
+
+        isMemImport :: Import -> Bool
+        isMemImport Import { desc = ImportMemory _ _ } = True
+        isMemImport _ = False
+
+        getMemIndex :: Module -> MemoryIndex -> Maybe Natural
+        getMemIndex Module { imports, mems } (Named id) =
+            let memImports = filter isMemImport imports in
+            case findIndex (\(Import { desc = ImportMemory ident _ }) -> ident == Just id) memImports of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (Memory _ (Just id) _) = True in
+                    fromIntegral . (+ length memImports) <$> findIndex isIdent mems
+        getMemIndex Module { imports, mems } (Index idx) = Just idx
+
+        -- global
+        synGlobalToStruct :: Module -> Global -> Either String S.Global
+        synGlobalToStruct mod Global { globalType, initializer } =
+            let ctx = FunCtx mod [] [] [] in
+            S.Global globalType <$> mapM (synInstrToStruct ctx) initializer
+
+        extractGlobal :: [Global] -> ModuleField -> [Global]
+        extractGlobal globals (MFGlobal global) = global : globals
+        extractGlobal globals _ = globals
+
+        isGlobalImport :: Import -> Bool
+        isGlobalImport Import { desc = ImportGlobal _ _ } = True
+        isGlobalImport _ = False
+
+        getGlobalIndex :: Module -> GlobalIndex -> Maybe Natural
+        getGlobalIndex Module { imports, globals } (Named id) =
+            let globalImports = filter isGlobalImport imports in
+            case findIndex (\(Import { desc = ImportGlobal ident _ }) -> ident == Just id) globalImports of
+                Just idx -> return $ fromIntegral idx
+                Nothing ->
+                    let isIdent (Global { ident }) = ident == Just id in
+                    fromIntegral . (+ length globalImports) <$> findIndex isIdent globals
+        getGlobalIndex Module { imports, globals } (Index idx) = Just idx
+
+        -- elem segment
+        synElemToStruct :: Module -> ElemSegment -> Either String S.ElemSegment
+        synElemToStruct mod ElemSegment { tableIndex, offset, funcIndexes } =
+            let ctx = FunCtx mod [] [] [] in
+            let offsetInstrs = mapM (synInstrToStruct ctx) offset in
+            let idx = fromJust $ getTableIndex mod tableIndex in
+            let indexes = map (fromJust . getFuncIndex mod) funcIndexes in
+            S.ElemSegment idx <$> offsetInstrs <*> return indexes
+
+        extractElemSegment :: [ElemSegment] -> ModuleField -> [ElemSegment]
+        extractElemSegment elems (MFElem elem) = elem : elems
+        extractElemSegment elems _ = elems
+
+        -- data segment
+        synDataToStruct :: Module -> DataSegment -> Either String S.DataSegment
+        synDataToStruct mod DataSegment { memIndex, offset, datastring } =
+            let ctx = FunCtx mod [] [] [] in
+            let offsetInstrs = mapM (synInstrToStruct ctx) offset in
+            let idx = fromJust $ getMemIndex mod memIndex in
+            S.DataSegment idx <$> offsetInstrs <*> return datastring
+
+        extractDataSegment :: [DataSegment] -> ModuleField -> [DataSegment]
+        extractDataSegment datas (MFData dataSegment) = dataSegment : datas
+        extractDataSegment datas _ = datas
+
+        -- start
+        synStartToStruct :: Module -> StartFunction -> S.StartFunction
+        synStartToStruct mod (StartFunction funIdx) =
+            S.StartFunction $ fromJust $ getFuncIndex mod funIdx
+        
+        extractStart :: [ModuleField] -> Maybe StartFunction
+        extractStart = foldl' extractStart' Nothing
+
+        extractStart' :: Maybe StartFunction -> ModuleField -> Maybe StartFunction
+        extractStart' _ (MFStart start) = Just start
+        extractStart' start _ = start
+
+        -- exports
+        extractExports :: Module -> [ModuleField] -> [ModuleField]
+        extractExports mod mf =
+            let initial = (funcImportLength, globImportLength, memImportLength, tableImportLength, []) in
+            let (_, _, _, _, result) = foldl' extractExport initial mf in
+            reverse result
+            where
+                funcImportLength = fromIntegral $ length $ filter isFuncImport $ imports mod
+                globImportLength = fromIntegral $ length $ filter isGlobalImport $ imports mod
+                memImportLength = fromIntegral $ length $ filter isMemImport $ imports mod
+                tableImportLength = fromIntegral $ length $ filter isTableImport $ imports mod
+
+                extractExport (fidx, gidx, midx, tidx, mf) (MFFunc fun@Function{ exportFuncAs }) =
+                    let exports = map (\name -> MFExport $ Export name $ ExportFunc $ Index fidx) exportFuncAs in
+                    (fidx + 1, gidx, midx, tidx, [MFFunc fun] ++ exports ++ mf)
+                extractExport (fidx, gidx, midx, tidx, mf) (MFGlobal glob@Global{ exportGlobalAs }) =
+                    let exports = map (\name -> MFExport $ Export name $ ExportGlobal $ Index gidx) exportGlobalAs in
+                    (fidx, gidx + 1, midx, tidx, [MFGlobal glob] ++ exports ++ mf)
+                extractExport (fidx, gidx, midx, tidx, mf) (MFMem (Memory exps i l)) =
+                    let exports = map (\name -> MFExport $ Export name $ ExportMemory $ Index midx) exps in
+                    (fidx, gidx, midx + 1, tidx, [MFMem (Memory exps i l)] ++ exports ++ mf)
+                extractExport (fidx, gidx, midx, tidx, mf) (MFTable (Table exps i t)) =
+                    let exports = map (\name -> MFExport $ Export name $ ExportTable $ Index tidx) exps in
+                    (fidx, gidx, midx, tidx + 1, [MFTable (Table exps i t)] ++ exports ++ mf)
+                extractExport (fidx, gidx, midx, tidx, mf) f = (fidx, gidx, midx, tidx, f:mf)
+ 
+        synExportsToStruct :: Module -> [ModuleField] -> [S.Export]
+        synExportsToStruct mod (MFExport Export { name, desc = ExportFunc idx } : rest) =
+            let exp = S.Export name $ S.ExportFunc $ fromJust $ getFuncIndex mod idx in
+            exp : synExportsToStruct mod rest
+        synExportsToStruct mod (MFExport Export { name, desc = ExportTable idx } : rest) =
+            let exp = S.Export name $ S.ExportTable $ fromJust $ getTableIndex mod idx in
+            exp : synExportsToStruct mod rest
+        synExportsToStruct mod (MFExport Export { name, desc = ExportMemory idx } : rest) =
+            let exp = S.Export name $ S.ExportMemory $ fromJust $ getMemIndex mod idx in
+            exp : synExportsToStruct mod rest
+        synExportsToStruct mod (MFExport Export { name, desc = ExportGlobal idx } : rest) =
+            let exp = S.Export name $ S.ExportGlobal $ fromJust $ getGlobalIndex mod idx in
+            exp : synExportsToStruct mod rest
+        synExportsToStruct mod (_ : rest) = synExportsToStruct mod rest
+        synExportsToStruct _ [] = []
+}
diff --git a/src/Language/Wasm/Script.hs b/src/Language/Wasm/Script.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/Script.hs
@@ -0,0 +1,252 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Language.Wasm.Script (
+    runScript,
+    OnAssertFail
+) where
+
+import qualified Data.Map as Map
+import qualified Data.Vector as Vector
+import qualified Data.Text.Lazy as TL
+import qualified Data.Text.Lazy.Encoding as TLEncoding
+import Numeric.IEEE (identicalIEEE)
+import qualified Control.DeepSeq as DeepSeq
+import Data.Maybe (fromJust, isNothing)
+
+import Language.Wasm.Parser (
+        Ident(..),
+        Script,
+        ModuleDef(..),
+        Command(..),
+        Action(..),
+        Assertion(..)
+    )
+
+import qualified Language.Wasm.Interpreter as Interpreter
+import qualified Language.Wasm.Validate as Validate
+import qualified Language.Wasm.Structure as Struct
+import qualified Language.Wasm.Parser as Parser
+import qualified Language.Wasm.Lexer as Lexer
+import qualified Language.Wasm.Binary as Binary
+
+type OnAssertFail = String -> Assertion -> IO ()
+
+data ScriptState = ScriptState {
+    store :: Interpreter.Store,
+    lastModule :: Maybe Interpreter.ModuleInstance,
+    modules :: Map.Map TL.Text Interpreter.ModuleInstance,
+    moduleRegistery :: Map.Map TL.Text Interpreter.ModuleInstance
+}
+
+emptyState :: ScriptState
+emptyState = ScriptState {
+    store = Interpreter.emptyStore,
+    lastModule = Nothing,
+    modules = Map.empty,
+    moduleRegistery = Map.empty
+}
+
+runScript :: OnAssertFail -> Script -> IO ()
+runScript onAssertFail script = do
+    (globI32, globF32, globF64) <- hostGlobals
+    (st, inst) <- Interpreter.makeHostModule Interpreter.emptyStore [
+            ("print", hostPrint []),
+            ("print_i32", hostPrint [Struct.I32]),
+            ("print_i32_f32", hostPrint [Struct.I32, Struct.F32]),
+            ("print_f64_f64", hostPrint [Struct.F64, Struct.F64]),
+            ("print_f32", hostPrint [Struct.F32]),
+            ("print_f64", hostPrint [Struct.F64]),
+            ("global_i32", globI32),
+            ("global_f32", globF32),
+            ("global_f64", globF64),
+            ("memory", Interpreter.HostMemory $ Struct.Limit 1 (Just 2)),
+            ("table", Interpreter.HostTable $ Struct.Limit 10 (Just 20))
+        ]
+    go script $ emptyState { store = st, moduleRegistery = Map.singleton "spectest" inst }
+    where
+        hostPrint paramTypes = Interpreter.HostFunction (Struct.FuncType paramTypes []) (\args -> return [])
+        hostGlobals = do
+            globI32 <- Interpreter.makeMutGlobal $ Interpreter.VI32 666
+            globF32 <- Interpreter.makeMutGlobal $ Interpreter.VF32 666
+            globF64 <- Interpreter.makeMutGlobal $ Interpreter.VF64 666
+            return (Interpreter.HostGlobal globI32, Interpreter.HostGlobal globF32, Interpreter.HostGlobal globF64)
+
+        go [] _ = return ()
+        go (c:cs) st = runCommand st c >>= go cs
+        
+        addToRegistery :: TL.Text -> Maybe Ident -> ScriptState -> ScriptState
+        addToRegistery name i st =
+            case getModule st i of
+                Just m -> st { moduleRegistery = Map.insert name m $ moduleRegistery st }
+                Nothing -> error $ "Cannot register module with identifier '" ++ show i  ++ "'. No such module"
+
+        addToStore :: Maybe Ident -> Interpreter.ModuleInstance -> ScriptState -> ScriptState
+        addToStore (Just (Ident ident)) m st = st { modules = Map.insert ident m $ modules st }
+        addToStore Nothing _ st = st
+
+        buildImports :: ScriptState -> Interpreter.Imports
+        buildImports st =
+            Map.fromList $ concat $ map toImports $ Map.toList $ moduleRegistery st
+            where
+                toImports :: (TL.Text, Interpreter.ModuleInstance) -> [((TL.Text, TL.Text), Interpreter.ExternalValue)]
+                toImports (modName, mod) = map (asImport modName) $ Vector.toList $ Interpreter.exports mod
+                asImport :: TL.Text -> Interpreter.ExportInstance -> ((TL.Text, TL.Text), Interpreter.ExternalValue)
+                asImport modName (Interpreter.ExportInstance name val) = ((modName, name), val)
+
+        addModule :: Maybe Ident -> Struct.Module -> ScriptState -> IO ScriptState
+        addModule ident m st =
+            case Validate.validate m of
+                Right m -> do
+                    res <- Interpreter.instantiate (store st) (buildImports st) m
+                    case res of
+                        Right (modInst, store') -> return $ addToStore ident modInst $ st { lastModule = Just modInst, store = store' }
+                        Left reason -> error $ "Module instantiation failed dut to invalid module with reason: " ++ show reason
+                Left reason -> error $ "Module instantiation failed dut to invalid module with reason: " ++ show reason
+        
+        getModule :: ScriptState -> Maybe Ident -> Maybe Interpreter.ModuleInstance
+        getModule st (Just (Ident i)) = Map.lookup i (modules st)
+        getModule st Nothing = lastModule st
+
+        asArg :: Struct.Expression -> Interpreter.Value
+        asArg [Struct.I32Const v] = Interpreter.VI32 v
+        asArg [Struct.F32Const v] = Interpreter.VF32 v
+        asArg [Struct.I64Const v] = Interpreter.VI64 v
+        asArg [Struct.F64Const v] = Interpreter.VF64 v
+        asArg _                   = error "Only const instructions supported as arguments for actions"
+
+        runAction :: ScriptState -> Action -> IO (Maybe [Interpreter.Value])
+        runAction st (Invoke ident name args) = do
+            case getModule st ident of
+                Just m -> Interpreter.invokeExport (store st) m name $ map asArg args
+                Nothing -> error $ "Cannot invoke function on module with identifier '" ++ show ident  ++ "'. No such module"
+        runAction st (Get ident name) = do
+            case getModule st ident of
+                Just m -> Interpreter.getGlobalValueByName (store st) m name >>= return . Just . (: [])
+                Nothing -> error $ "Cannot invoke function on module with identifier '" ++ show ident  ++ "'. No such module"
+
+        isValueEqual :: Interpreter.Value -> Interpreter.Value -> Bool
+        isValueEqual (Interpreter.VI32 v1) (Interpreter.VI32 v2) = v1 == v2
+        isValueEqual (Interpreter.VI64 v1) (Interpreter.VI64 v2) = v1 == v2
+        isValueEqual (Interpreter.VF32 v1) (Interpreter.VF32 v2) = identicalIEEE v1 v2
+        isValueEqual (Interpreter.VF64 v1) (Interpreter.VF64 v2) = identicalIEEE v1 v2
+        isValueEqual _ _ = False
+
+        isNaNReturned :: ScriptState -> Action -> Assertion -> IO ()
+        isNaNReturned st action assert = do
+            result <- runAction st action
+            case result of
+                Just [Interpreter.VF32 v] ->
+                    if isNaN v
+                    then return ()
+                    else onAssertFail ("Expected NaN, but action returned " ++ show v) assert
+                Just [Interpreter.VF64 v] ->
+                    if isNaN v
+                    then return ()
+                    else onAssertFail ("Expected NaN, but action returned " ++ show v) assert
+                _ -> onAssertFail ("Expected NaN, but action returned " ++ show result) assert
+        
+        buildModule :: ModuleDef -> (Maybe Ident, Struct.Module)
+        buildModule (RawModDef ident m) = (ident, m)
+        buildModule (TextModDef ident textRep) =
+            let Right m = Lexer.scanner (TLEncoding.encodeUtf8 textRep) >>= Parser.parseModule in
+            (ident, m)
+        buildModule (BinaryModDef ident binaryRep) =
+            let Right m = Binary.decodeModuleLazy binaryRep in
+            (ident, m)
+
+        checkModuleInvalid :: Struct.Module -> IO ()
+        checkModuleInvalid _ = return ()
+
+        getFailureString :: Validate.ValidationError -> [TL.Text]
+        getFailureString (Validate.TypeMismatch _ _) = ["type mismatch"]
+        getFailureString Validate.ResultTypeDoesntMatch = ["type mismatch"]
+        getFailureString Validate.MoreThanOneMemory = ["multiple memories"]
+        getFailureString Validate.MoreThanOneTable = ["multiple tables"]
+        getFailureString Validate.LocalIndexOutOfRange = ["unknown local"]
+        getFailureString Validate.MemoryIndexOutOfRange = ["unknown memory", "unknown memory 0"]
+        getFailureString Validate.TableIndexOutOfRange = ["unknown table", "unknown table 0"]
+        getFailureString Validate.FunctionIndexOutOfRange = ["unknown function", "unknown function 0"]
+        getFailureString Validate.GlobalIndexOutOfRange = ["unknown global"]
+        getFailureString Validate.LabelIndexOutOfRange = ["unknown label"]
+        getFailureString Validate.TypeIndexOutOfRange = ["unknown type"]
+        getFailureString Validate.MinMoreThanMaxInMemoryLimit = ["size minimum must not be greater than maximum"]
+        getFailureString Validate.MemoryLimitExceeded = ["memory size must be at most 65536 pages (4GiB)"]
+        getFailureString Validate.AlignmentOverflow = ["alignment", "alignment must not be larger than natural"]
+        getFailureString (Validate.DuplicatedExportNames _) = ["duplicate export name"]
+        getFailureString Validate.InvalidConstantExpr = ["constant expression required"]
+        getFailureString Validate.InvalidResultArity = ["invalid result arity"]
+        getFailureString Validate.GlobalIsImmutable = ["global is immutable"]
+        getFailureString Validate.ImportedGlobalIsNotConst = ["mutable globals cannot be imported"]
+        getFailureString Validate.ExportedGlobalIsNotConst = ["mutable globals cannot be exported"]
+        getFailureString Validate.InvalidStartFunctionType = ["start function"]
+        getFailureString r = [TL.concat ["not implemented ", (TL.pack $ show r)]]
+
+        runAssert :: ScriptState -> Assertion -> IO ()
+        runAssert st assert@(AssertReturn action expected) = do
+            result <- runAction st action
+            case result of
+                Just result -> do
+                    if length result == length expected && (all id $ zipWith isValueEqual result (map asArg expected))
+                    then return ()
+                    else onAssertFail ("Expected " ++ show (map asArg expected) ++ ", but action returned " ++ show result) assert
+                Nothing -> onAssertFail ("Expected " ++ show (map asArg expected) ++ ", but action returned Trap") assert
+        runAssert st assert@(AssertReturnCanonicalNaN action) = isNaNReturned st action assert
+        runAssert st assert@(AssertReturnArithmeticNaN action) = isNaNReturned st action assert
+        runAssert st assert@(AssertInvalid moduleDef failureString) =
+            let (_, m) = buildModule moduleDef in
+            case Validate.validate m of
+                Right _ -> onAssertFail "Invalid module pass validation" assert
+                Left reason ->
+                    if failureString `elem` getFailureString reason
+                    then return ()
+                    else
+                        let msg = "Module invalid for other reason. Expected "
+                                ++ show failureString
+                                ++ ", but actual is "
+                                ++ show (getFailureString reason)
+                        in onAssertFail msg assert
+        runAssert st assert@(AssertMalformed (TextModDef _ textRep) failureString) =
+            case DeepSeq.force $ Lexer.scanner (TLEncoding.encodeUtf8 textRep) >>= Parser.parseModule of
+                Right _ -> onAssertFail ("Module parsing should fail with failure string " ++ show failureString) assert
+                Left _ -> return ()
+        runAssert st assert@(AssertMalformed (BinaryModDef ident binaryRep) failureString) =
+            case Binary.decodeModuleLazy binaryRep of
+                Right _ -> onAssertFail ("Module decoding should fail with failure string " ++ show failureString) assert
+                Left _ -> return ()
+        runAssert st assert@(AssertMalformed (RawModDef _ _) failureString) = return ()
+        runAssert st assert@(AssertUnlinkable moduleDef failureString) =
+            let (_, m) = buildModule moduleDef in
+            case Validate.validate m of
+                Right m -> do
+                    res <- Interpreter.instantiate (store st) (buildImports st) m
+                    case res of
+                        Left err -> return ()
+                        Right _ -> onAssertFail ("Module linking should fail with failure string " ++ show failureString) assert
+                Left reason -> error $ "Module linking failed dut to invalid module with reason: " ++ show reason
+        runAssert st assert@(AssertTrap (Left action) failureString) = do
+            result <- runAction st action
+            if isNothing result
+            then return ()
+            else onAssertFail ("Expected trap, but action returned " ++ show (fromJust result)) assert
+        runAssert st assert@(AssertTrap (Right moduleDef) failureString) =
+            let (_, m) = buildModule moduleDef in
+            case Validate.validate m of
+                Right m -> do
+                    res <- Interpreter.instantiate (store st) (buildImports st) m
+                    case res of
+                        Left "Start function terminated with trap" -> return ()
+                        _ -> onAssertFail ("Module linking should fail with trap during execution of a start function") assert
+                Left reason -> error $ "Module linking failed dut to invalid module with reason: " ++ show reason
+        runAssert st assert@(AssertExhaustion action failureString) = do
+            result <- runAction st action
+            if isNothing result
+            then return ()
+            else onAssertFail ("Expected exhaustion, but action returned " ++ show (fromJust result)) assert
+
+        runCommand :: ScriptState -> Command -> IO ScriptState
+        runCommand st (ModuleDef moduleDef) =
+            let (ident, m) = buildModule moduleDef in
+            addModule ident m st
+        runCommand st (Register name i) = return $ addToRegistery name i st
+        runCommand st (Action action) = runAction st action >> return st
+        runCommand st (Assertion assertion) = runAssert st assertion >> return st
+        runCommand st _ = return st
diff --git a/src/Language/Wasm/Structure.hs b/src/Language/Wasm/Structure.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/Structure.hs
@@ -0,0 +1,284 @@
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DeriveAnyClass #-}
+
+module Language.Wasm.Structure (
+    Module(..),
+    DataSegment(..),
+    ElemSegment(..),
+    StartFunction(..),
+    Export(..),
+    ExportDesc(..),
+    Table(..),
+    Memory(..),
+    Global(..),
+    Function(..),
+    Import(..),
+    ImportDesc(..),
+    Instruction(..),
+    MemArg(..),
+    IUnOp(..),
+    IBinOp(..),
+    IRelOp(..),
+    FUnOp(..),
+    FBinOp(..),
+    FRelOp(..),
+    BitSize(..),
+    TableType(..),
+    ElemType(..),
+    Limit(..),
+    GlobalType(..),
+    FuncType(..),
+    ValueType(..),
+    ResultType,
+    Expression,
+    LabelIndex,
+    LocalIndex,
+    GlobalIndex,
+    emptyModule,
+    isFuncImport,
+    isTableImport,
+    isMemImport,
+    isGlobalImport
+) where
+
+import Numeric.Natural (Natural)
+import Data.Word (Word32, Word64)
+import qualified Data.ByteString.Lazy as LBS
+import qualified Data.Text.Lazy as TL
+import Control.DeepSeq (NFData)
+import GHC.Generics (Generic)
+
+data BitSize = BS32 | BS64 deriving (Show, Eq, Generic, NFData)
+
+data IUnOp = IClz | ICtz | IPopcnt deriving (Show, Eq, Generic, NFData)
+
+data IBinOp =
+    IAdd
+    | ISub
+    | IMul
+    | IDivU
+    | IDivS
+    | IRemU
+    | IRemS
+    | IAnd
+    | IOr
+    | IXor
+    | IShl
+    | IShrU
+    | IShrS
+    | IRotl
+    | IRotr
+    deriving (Show, Eq, Generic, NFData)
+
+data IRelOp = IEq | INe | ILtU | ILtS | IGtU | IGtS | ILeU | ILeS | IGeU | IGeS deriving (Show, Eq, Generic, NFData)
+
+data FUnOp = FAbs | FNeg | FCeil | FFloor | FTrunc | FNearest | FSqrt deriving (Show, Eq, Generic, NFData)
+
+data FBinOp = FAdd | FSub | FMul | FDiv | FMin | FMax | FCopySign deriving (Show, Eq, Generic, NFData)
+
+data FRelOp = FEq | FNe | FLt | FGt | FLe | FGe deriving (Show, Eq, Generic, NFData)
+
+data MemArg = MemArg { offset :: Natural, align :: Natural } deriving (Show, Eq, Generic, NFData)
+
+type LabelIndex = Natural
+type FuncIndex = Natural
+type TypeIndex = Natural
+type LocalIndex = Natural
+type GlobalIndex = Natural
+type MemoryIndex = Natural
+type TableIndex = Natural
+
+data ValueType =
+    I32
+    | I64
+    | F32
+    | F64
+    deriving (Show, Eq, Generic, NFData)
+
+type ResultType = [ValueType]
+type ParamsType = [ValueType]
+type LocalsType = [ValueType]
+
+data FuncType = FuncType { params :: ParamsType, results :: ResultType } deriving (Show, Eq, Generic, NFData)
+
+data Instruction index =
+    -- Control instructions
+    Unreachable
+    | Nop
+    | Block { resultType :: ResultType, body :: Expression }
+    | Loop { resultType :: ResultType, body :: Expression }
+    | If { resultType :: ResultType, true :: Expression, false :: Expression }
+    | Br index
+    | BrIf index
+    | BrTable [index] index
+    | Return
+    | Call index
+    | CallIndirect index
+    -- Parametric instructions
+    | Drop
+    | Select
+    -- Variable instructions
+    | GetLocal index
+    | SetLocal index
+    | TeeLocal index
+    | GetGlobal index
+    | SetGlobal index
+    -- Memory instructions
+    | I32Load MemArg
+    | I64Load MemArg
+    | F32Load MemArg
+    | F64Load MemArg
+    | I32Load8S MemArg
+    | I32Load8U MemArg
+    | I32Load16S MemArg
+    | I32Load16U MemArg
+    | I64Load8S MemArg
+    | I64Load8U MemArg
+    | I64Load16S MemArg
+    | I64Load16U MemArg
+    | I64Load32S MemArg
+    | I64Load32U MemArg
+    | I32Store MemArg
+    | I64Store MemArg
+    | F32Store MemArg
+    | F64Store MemArg
+    | I32Store8 MemArg
+    | I32Store16 MemArg
+    | I64Store8 MemArg
+    | I64Store16 MemArg
+    | I64Store32 MemArg
+    | CurrentMemory
+    | GrowMemory
+    -- Numeric instructions
+    | I32Const Word32
+    | I64Const Word64
+    | F32Const Float
+    | F64Const Double
+    | IUnOp BitSize IUnOp
+    | IBinOp BitSize IBinOp
+    | I32Eqz
+    | I64Eqz
+    | IRelOp BitSize IRelOp
+    | FUnOp BitSize FUnOp
+    | FBinOp BitSize FBinOp
+    | FRelOp BitSize FRelOp
+    | I32WrapI64
+    | ITruncFU {- Int Size -} BitSize {- Float Size -} BitSize
+    | ITruncFS {- Int Size -} BitSize {- Float Size -} BitSize
+    | I64ExtendSI32
+    | I64ExtendUI32
+    | FConvertIU {- Float Size -} BitSize {- Int Size -} BitSize
+    | FConvertIS {- Float Size -} BitSize {- Int Size -} BitSize
+    | F32DemoteF64
+    | F64PromoteF32
+    | IReinterpretF BitSize
+    | FReinterpretI BitSize
+    deriving (Show, Eq, Generic, NFData)
+
+type Expression = [Instruction Natural]
+
+data Function = Function {
+    funcType :: TypeIndex,
+    localTypes :: LocalsType,
+    body :: Expression
+} deriving (Show, Eq, Generic, NFData)
+
+data Limit = Limit Natural (Maybe Natural) deriving (Show, Eq, Generic, NFData)
+
+data ElemType = AnyFunc deriving (Show, Eq, Generic, NFData)
+
+data TableType = TableType Limit ElemType deriving (Show, Eq, Generic, NFData)
+
+data Table = Table TableType deriving (Show, Eq, Generic, NFData)
+
+data Memory = Memory Limit deriving (Show, Eq, Generic, NFData)
+
+data GlobalType = Const ValueType | Mut ValueType deriving (Show, Eq, Generic, NFData)
+
+data Global = Global {
+    globalType :: GlobalType,
+    initializer :: Expression
+} deriving (Show, Eq, Generic, NFData)
+
+data ElemSegment = ElemSegment {
+    tableIndex :: TableIndex,
+    offset :: Expression,
+    funcIndexes :: [FuncIndex]
+} deriving (Show, Eq, Generic, NFData)
+
+data DataSegment = DataSegment {
+    memIndex :: MemoryIndex,
+    offset :: Expression,
+    chunk :: LBS.ByteString
+} deriving (Show, Eq, Generic, NFData)
+
+data StartFunction = StartFunction FuncIndex deriving (Show, Eq, Generic, NFData)
+
+data ExportDesc =
+    ExportFunc FuncIndex
+    | ExportTable TableIndex
+    | ExportMemory MemoryIndex
+    | ExportGlobal GlobalIndex
+    deriving (Show, Eq, Generic, NFData)
+
+data Export = Export {
+    name :: TL.Text,
+    desc :: ExportDesc
+} deriving (Show, Eq, Generic, NFData)
+
+data ImportDesc =
+    ImportFunc TypeIndex
+    | ImportTable TableType
+    | ImportMemory Limit
+    | ImportGlobal GlobalType
+    deriving (Show, Eq, Generic, NFData)
+
+data Import = Import {
+    sourceModule :: TL.Text,
+    name :: TL.Text,
+    desc :: ImportDesc
+} deriving (Show, Eq, Generic, NFData)
+
+isFuncImport :: Import -> Bool
+isFuncImport (Import _ _ (ImportFunc _)) = True
+isFuncImport _ = False
+
+isTableImport :: Import -> Bool
+isTableImport (Import _ _ (ImportTable _)) = True
+isTableImport _ = False
+
+isMemImport :: Import -> Bool
+isMemImport (Import _ _ (ImportMemory _)) = True
+isMemImport _ = False
+
+isGlobalImport :: Import -> Bool
+isGlobalImport (Import _ _ (ImportGlobal _)) = True
+isGlobalImport _ = False
+
+data Module = Module {
+    types :: [FuncType],
+    functions :: [Function],
+    tables :: [Table],
+    mems :: [Memory],
+    globals :: [Global],
+    elems :: [ElemSegment],
+    datas :: [DataSegment],
+    start :: Maybe StartFunction,
+    imports :: [Import],
+    exports :: [Export]
+} deriving (Show, Eq, Generic, NFData)
+
+emptyModule :: Module
+emptyModule = Module {
+    types = [],
+    functions = [],
+    tables = [],
+    mems = [],
+    globals = [],
+    elems = [],
+    datas = [],
+    start = Nothing,
+    imports = [],
+    exports = []
+}
diff --git a/src/Language/Wasm/Validate.hs b/src/Language/Wasm/Validate.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Wasm/Validate.hs
@@ -0,0 +1,651 @@
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleInstances #-}
+
+module Language.Wasm.Validate (
+    ValidationError(..),
+    ValidationResult(..),
+    validate,
+    isValid,
+    ValidModule,
+    getModule
+) where
+
+import Language.Wasm.Structure
+import qualified Data.Set as Set
+import Data.List (foldl')
+import qualified Data.Text.Lazy as TL
+import Data.Maybe (fromMaybe, maybeToList, catMaybes)
+import Data.Monoid ((<>))
+import Numeric.Natural (Natural)
+
+import Control.Monad (foldM)
+import Control.Monad.Reader (ReaderT, runReaderT, withReaderT, ask)
+import Control.Monad.Except (Except, runExcept, throwError)
+
+import Debug.Trace as Debug
+
+data ValidationError =
+    DuplicatedExportNames [String]
+    | InvalidTableType
+    | MinMoreThanMaxInMemoryLimit
+    | MemoryLimitExceeded
+    | AlignmentOverflow
+    | MoreThanOneMemory
+    | MoreThanOneTable
+    | FunctionIndexOutOfRange
+    | TableIndexOutOfRange
+    | MemoryIndexOutOfRange
+    | LocalIndexOutOfRange
+    | GlobalIndexOutOfRange
+    | LabelIndexOutOfRange
+    | TypeIndexOutOfRange
+    | ResultTypeDoesntMatch
+    | TypeMismatch { actual :: Arrow, expected :: Arrow }
+    | InvalidResultArity
+    | InvalidConstantExpr
+    | InvalidStartFunctionType
+    | ImportedGlobalIsNotConst
+    | ExportedGlobalIsNotConst
+    | GlobalIsImmutable
+    deriving (Show, Eq)
+
+type ValidationResult = Either ValidationError ()
+
+instance Monoid ValidationResult where
+    mempty = Right ()
+    mappend (Right ()) vr = vr
+    mappend vr (Right ()) = vr
+    mappend vr _ = vr
+
+isValid :: ValidationResult -> Bool
+isValid (Right ()) = True
+isValid (Left reason) = Debug.trace ("Module mismatched with reason " ++ show reason) $ False
+
+type Validator = Module -> ValidationResult
+
+data VType =
+    Val ValueType
+    | Var
+    | Any
+    deriving (Show, Eq)
+
+type End = [VType]
+
+empty :: [ValueType]
+empty = []
+
+class ToEnd a where
+    toEnd :: a -> [VType]
+
+instance ToEnd VType where
+    toEnd val = [val]
+
+instance ToEnd ValueType where
+    toEnd val = [Val val]
+
+instance ToEnd [ValueType] where
+    toEnd = map Val
+
+instance ToEnd [VType] where
+    toEnd = id
+
+data Arrow = Arrow End End deriving (Show, Eq)
+
+(==>) :: (ToEnd a, ToEnd b) => a -> b -> Arrow
+(==>) a b = Arrow (toEnd a) (toEnd b)
+
+asArrow :: FuncType -> Arrow
+asArrow (FuncType params results) = Arrow (map Val params) (map Val results)
+
+isArrowMatch :: Arrow -> Arrow -> Bool
+isArrowMatch (f `Arrow` t) ( f' `Arrow` t') = isEndMatch f f' && isEndMatch t t'
+    where
+        isEndMatch :: End -> End -> Bool
+        isEndMatch (Any:l) (Any:r) =
+            let (leftTail, rightTail) = unzip $ zip (takeWhile (/= Any) $ reverse l) (takeWhile (/= Any) $ reverse r) in
+            isEndMatch (reverse leftTail) (reverse rightTail)
+        isEndMatch (Any:l) r =
+            let (leftTail, rightTail) = unzip $ zip (takeWhile (/= Any) $ reverse l) (takeWhile (/= Any) $ reverse r) in
+            isEndMatch (reverse leftTail) (reverse rightTail)
+        isEndMatch l (Any:r) =
+            let (leftTail, rightTail) = unzip $ zip (takeWhile (/= Any) $ reverse l) (takeWhile (/= Any) $ reverse r) in
+            isEndMatch (reverse leftTail) (reverse rightTail)
+        isEndMatch (Var:l) (x:r) =
+            let subst = replace Var x in
+            isEndMatch (subst l) (subst r)
+        isEndMatch (x:l) (Var:r) =
+            let subst = replace Var x in
+            isEndMatch (subst l) (subst r)
+        isEndMatch (Val v:l) (Val v':r) = v == v' && isEndMatch l r
+        isEndMatch [] [] = True
+        isEndMatch _ _ = False
+
+data Ctx = Ctx {
+    types :: [FuncType],
+    funcs :: [FuncType],
+    tables :: [TableType],
+    mems :: [Limit],
+    globals :: [GlobalType],
+    locals :: [ValueType],
+    labels :: [Maybe ValueType],
+    returns :: Maybe ValueType,
+    importedGlobals :: Natural
+} deriving (Show, Eq)
+
+type Checker = ReaderT Ctx (Except ValidationError)
+
+freshVar :: Checker VType
+freshVar = return Var
+
+runChecker :: Ctx -> Checker a -> Either ValidationError a
+runChecker ctx = runExcept . flip runReaderT ctx
+
+(!?) :: [a] -> Natural -> Maybe a
+(!?) (x:_) 0 = Just x
+(!?) (_:rest) n = rest !? (n - 1)
+(!?) [] _ = Nothing
+
+safeHead :: [a] -> Maybe a
+safeHead (x: _) = Just x
+safeHead [] = Nothing
+
+maybeToEither :: ValidationError -> Maybe a -> Checker a
+maybeToEither _ (Just a) = return a
+maybeToEither l Nothing = throwError l
+
+asType :: GlobalType -> VType
+asType (Const v) = Val v
+asType (Mut v) = Val v
+
+shouldBeMut :: GlobalType -> Checker ()
+shouldBeMut (Mut _) = return ()
+shouldBeMut (Const v) = throwError GlobalIsImmutable
+
+getLabel :: LabelIndex -> Checker (Maybe ValueType)
+getLabel lbl = do
+    Ctx { labels } <- ask
+    case labels !? lbl of
+        Nothing -> throwError LabelIndexOutOfRange
+        Just v -> return v
+
+withLabel :: [ValueType] -> Checker a -> Checker a
+withLabel result = withReaderT (\ctx -> ctx { labels = safeHead result : labels ctx })
+
+isMemArgValid :: Int -> MemArg -> Checker ()
+isMemArgValid sizeInBytes MemArg { align } = if 2 ^ align <= sizeInBytes then return () else throwError AlignmentOverflow
+
+checkMemoryInstr :: Int -> MemArg -> Checker ()
+checkMemoryInstr size memarg = do
+    isMemArgValid size memarg
+    Ctx { mems } <- ask 
+    if length mems < 1 then throwError MemoryIndexOutOfRange else return ()
+
+getInstrType :: Instruction Natural -> Checker Arrow
+getInstrType Unreachable = return $ Any ==> Any
+getInstrType Nop = return $ empty ==> empty
+getInstrType Block { resultType, body } = do
+    let blockType = empty ==> resultType
+    t <- withLabel resultType $ getExpressionType body
+    if isArrowMatch t blockType
+    then return $ empty ==> resultType
+    else throwError $ TypeMismatch t blockType
+getInstrType Loop { resultType, body } = do
+    let blockType = empty ==> resultType
+    t <- withLabel [] $ getExpressionType body
+    if isArrowMatch t blockType
+    then return $ empty ==> resultType
+    else throwError $ TypeMismatch t blockType
+getInstrType If { resultType, true, false } = do
+    let blockType = empty ==> resultType
+    l <- withLabel resultType $ getExpressionType true
+    r <- withLabel resultType $ getExpressionType false
+    if isArrowMatch l blockType
+    then (if isArrowMatch r blockType then (return $ I32 ==> resultType) else (throwError $ TypeMismatch r blockType))
+    else throwError $ TypeMismatch l blockType
+getInstrType (Br lbl) = do
+    r <- map Val . maybeToList <$> getLabel lbl
+    return $ (Any : r) ==> Any
+getInstrType (BrIf lbl) = do
+    r <- map Val . maybeToList <$> getLabel lbl
+    return $ (r ++ [Val I32]) ==> r
+getInstrType (BrTable lbls lbl) = do
+    r <- getLabel lbl
+    rs <- mapM getLabel lbls
+    if all (== r) rs
+    then return $ ([Any] ++ (map Val $ maybeToList r) ++ [Val I32]) ==> Any
+    else throwError ResultTypeDoesntMatch
+getInstrType Return = do
+    Ctx { returns } <- ask
+    return $ (Any : (map Val $ maybeToList returns)) ==> Any
+getInstrType (Call fun) = do
+    Ctx { funcs } <- ask
+    maybeToEither FunctionIndexOutOfRange $ asArrow <$> funcs !? fun
+getInstrType (CallIndirect sign) = do
+    Ctx { types, tables } <- ask
+    if length tables < 1
+    then throwError TableIndexOutOfRange
+    else do
+        Arrow from to <- maybeToEither TypeIndexOutOfRange $ asArrow <$> types !? sign
+        return $ (from ++ [Val I32]) ==> to
+getInstrType Drop = do
+    var <- freshVar
+    return $ var ==> empty
+getInstrType Select = do
+    var <- freshVar
+    return $ [var, var, Val I32] ==> var
+getInstrType (GetLocal local) = do
+    Ctx { locals }  <- ask
+    t <- maybeToEither LocalIndexOutOfRange $ locals !? local
+    return $ empty ==> Val t
+getInstrType (SetLocal local) = do
+    Ctx { locals } <- ask
+    t <- maybeToEither LocalIndexOutOfRange $ locals !? local
+    return $ Val t ==> empty
+getInstrType (TeeLocal local) = do
+    Ctx { locals } <- ask
+    t <- maybeToEither LocalIndexOutOfRange $ locals !? local
+    return $ Val t ==> Val t
+getInstrType (GetGlobal global) = do
+    Ctx { globals } <- ask
+    t <- maybeToEither GlobalIndexOutOfRange $ asType <$> globals !? global
+    return $ empty ==> t
+getInstrType (SetGlobal global) = do
+    Ctx { globals } <- ask
+    t <- maybeToEither GlobalIndexOutOfRange $ asType <$> globals !? global
+    shouldBeMut $ globals !! fromIntegral global
+    return $ t ==> empty
+getInstrType (I32Load memarg) = do
+    checkMemoryInstr 4 memarg
+    return $ I32 ==> I32
+getInstrType (I64Load memarg) = do
+    checkMemoryInstr 8 memarg
+    return $ I32 ==> I64
+getInstrType (F32Load memarg) = do
+    checkMemoryInstr 4 memarg
+    return $ I32 ==> F32
+getInstrType (F64Load memarg) = do
+    checkMemoryInstr 8 memarg
+    return $ I32 ==> F64
+getInstrType (I32Load8S memarg) = do
+    checkMemoryInstr 1 memarg
+    return $ I32 ==> I32
+getInstrType (I32Load8U memarg) = do
+    checkMemoryInstr 1 memarg
+    return $ I32 ==> I32
+getInstrType (I32Load16S memarg) = do
+    checkMemoryInstr 2 memarg
+    return $ I32 ==> I32
+getInstrType (I32Load16U memarg) = do
+    checkMemoryInstr 2 memarg
+    return $ I32 ==> I32
+getInstrType (I64Load8S memarg) = do
+    checkMemoryInstr 1 memarg
+    return $ I32 ==> I64
+getInstrType (I64Load8U memarg) = do
+    checkMemoryInstr 1 memarg
+    return $ I32 ==> I64
+getInstrType (I64Load16S memarg) = do
+    checkMemoryInstr 2 memarg
+    return $ I32 ==> I64
+getInstrType (I64Load16U memarg) = do
+    checkMemoryInstr 2 memarg
+    return $ I32 ==> I64
+getInstrType (I64Load32S memarg) = do
+    checkMemoryInstr 4 memarg
+    return $ I32 ==> I64
+getInstrType (I64Load32U memarg) = do
+    checkMemoryInstr 8 memarg
+    return $ I32 ==> I64
+getInstrType (I32Store memarg) = do
+    checkMemoryInstr 4 memarg
+    return $ [I32, I32] ==> empty
+getInstrType (I64Store memarg) = do
+    checkMemoryInstr 8 memarg
+    return $ [I32, I64] ==> empty
+getInstrType (F32Store memarg) = do
+    checkMemoryInstr 4 memarg
+    return $ [I32, F32] ==> empty
+getInstrType (F64Store memarg) = do
+    checkMemoryInstr 8 memarg
+    return $ [I32, F64] ==> empty
+getInstrType (I32Store8 memarg) = do
+    checkMemoryInstr 1 memarg
+    return $ [I32, I32] ==> empty
+getInstrType (I32Store16 memarg) = do
+    checkMemoryInstr 2 memarg
+    return $ [I32, I32] ==> empty
+getInstrType (I64Store8 memarg) = do
+    checkMemoryInstr 1 memarg
+    return $ [I32, I64] ==> empty
+getInstrType (I64Store16 memarg) = do
+    checkMemoryInstr 2 memarg
+    return $ [I32, I64] ==> empty
+getInstrType (I64Store32 memarg) = do
+    checkMemoryInstr 4 memarg
+    return $ [I32, I64] ==> empty
+getInstrType CurrentMemory = do
+    Ctx { mems } <- ask 
+    if length mems < 1 then throwError MemoryIndexOutOfRange else return $ empty ==> I32
+getInstrType GrowMemory = do
+    Ctx { mems } <- ask 
+    if length mems < 1 then throwError MemoryIndexOutOfRange else return $ I32 ==> I32
+getInstrType (I32Const _) = return $ empty ==> I32
+getInstrType (I64Const _) = return $ empty ==> I64
+getInstrType (F32Const _) = return $ empty ==> F32
+getInstrType (F64Const _) = return $ empty ==> F64
+getInstrType (IUnOp BS32 _) = return $ I32 ==> I32
+getInstrType (IUnOp BS64 _) = return $ I64 ==> I64
+getInstrType (IBinOp BS32 _) = return $ [I32, I32] ==> I32
+getInstrType (IBinOp BS64 _) = return $ [I64, I64] ==> I64
+getInstrType I32Eqz = return $ I32 ==> I32
+getInstrType I64Eqz = return $ I64 ==> I32
+getInstrType (IRelOp BS32 _) = return $ [I32, I32] ==> I32
+getInstrType (IRelOp BS64 _) = return $ [I64, I64] ==> I32
+getInstrType (FUnOp BS32 _) = return $ F32 ==> F32
+getInstrType (FUnOp BS64 _) = return $ F64 ==> F64
+getInstrType (FBinOp BS32 _) = return $ [F32, F32] ==> F32
+getInstrType (FBinOp BS64 _) = return $ [F64, F64] ==> F64
+getInstrType (FRelOp BS32 _) = return $ [F32, F32] ==> I32
+getInstrType (FRelOp BS64 _) = return $ [F64, F64] ==> I32
+getInstrType I32WrapI64 = return $ I64 ==> I32
+getInstrType (ITruncFU BS32 BS32) = return $ F32 ==> I32
+getInstrType (ITruncFU BS32 BS64) = return $ F64 ==> I32
+getInstrType (ITruncFU BS64 BS32) = return $ F32 ==> I64
+getInstrType (ITruncFU BS64 BS64) = return $ F64 ==> I64
+getInstrType (ITruncFS BS32 BS32) = return $ F32 ==> I32
+getInstrType (ITruncFS BS32 BS64) = return $ F64 ==> I32
+getInstrType (ITruncFS BS64 BS32) = return $ F32 ==> I64
+getInstrType (ITruncFS BS64 BS64) = return $ F64 ==> I64
+getInstrType I64ExtendSI32 = return $ I32 ==> I64
+getInstrType I64ExtendUI32 = return $ I32 ==> I64
+getInstrType (FConvertIU BS32 BS32) = return $ I32 ==> F32
+getInstrType (FConvertIU BS32 BS64) = return $ I64 ==> F32
+getInstrType (FConvertIU BS64 BS32) = return $ I32 ==> F64
+getInstrType (FConvertIU BS64 BS64) = return $ I64 ==> F64
+getInstrType (FConvertIS BS32 BS32) = return $ I32 ==> F32
+getInstrType (FConvertIS BS32 BS64) = return $ I64 ==> F32
+getInstrType (FConvertIS BS64 BS32) = return $ I32 ==> F64
+getInstrType (FConvertIS BS64 BS64) = return $ I64 ==> F64
+getInstrType F32DemoteF64 = return $ F64 ==> F32
+getInstrType F64PromoteF32 = return $ F32 ==> F64
+getInstrType (IReinterpretF BS32) = return $ F32 ==> I32
+getInstrType (IReinterpretF BS64) = return $ F64 ==> I64
+getInstrType (FReinterpretI BS32) = return $ I32 ==> F32
+getInstrType (FReinterpretI BS64) = return $ I64 ==> F64
+
+
+replace :: (Eq a) => a -> a -> [a] -> [a]
+replace _ _ [] = []
+replace x y (v:r) = (if x == v then y else v) : replace x y r
+
+getExpressionType :: Expression -> Checker Arrow
+getExpressionType = fmap ([] `Arrow`) . foldM go []
+    where
+        go :: [VType] -> Instruction Natural -> Checker [VType]
+        go stack instr = do
+            (f `Arrow` t) <- getInstrType instr
+            matchStack stack (reverse f) t
+        
+        matchStack :: [VType] -> [VType] -> [VType] -> Checker [VType]
+        matchStack stack@(Any:_) _arg res = return $ res ++ stack
+        matchStack (Val v:stack) (Val v':args) res =
+            if v == v'
+            then matchStack stack args res
+            else throwError $ TypeMismatch ((reverse $ Val v':args) `Arrow` res) ([] `Arrow` (Val v:stack))
+        matchStack _ (Any:_) res = return $ res
+        matchStack (Val v:stack) (Var:args) res =
+            let subst = replace Var (Val v) in
+            matchStack stack (subst args) (subst res)
+        matchStack stack [] res = return $ res ++ stack
+        matchStack [] args res = throwError $ TypeMismatch ((reverse args) `Arrow` res) ([] `Arrow` [])
+        matchStack _ _ _ = error "inconsistent checker state"
+
+isConstExpression :: Expression -> Checker ()
+isConstExpression [] = return ()
+isConstExpression ((I32Const _):rest) = isConstExpression rest
+isConstExpression ((I64Const _):rest) = isConstExpression rest
+isConstExpression ((F32Const _):rest) = isConstExpression rest
+isConstExpression ((F64Const _):rest) = isConstExpression rest
+isConstExpression ((GetGlobal idx):rest) = do
+    Ctx {globals, importedGlobals} <- ask
+    if importedGlobals <= idx
+        then throwError GlobalIndexOutOfRange
+        else return ()
+    case globals !! fromIntegral idx of
+        Const _ -> isConstExpression rest
+        Mut _ -> throwError InvalidConstantExpr
+isConstExpression _ = throwError InvalidConstantExpr
+
+getFuncTypes :: Module -> [FuncType]
+getFuncTypes Module {types, functions, imports} =
+    let funImports = catMaybes $ map getFuncType imports in
+    funImports ++ map ((types !!) . fromIntegral . funcType) functions
+    where
+        getFuncType (Import _ _ (ImportFunc typeIdx)) = Just $ types !! (fromIntegral typeIdx)
+        getFuncType _ = Nothing
+
+ctxFromModule :: [ValueType] -> [Maybe ValueType] -> Maybe ValueType -> Module -> Ctx
+ctxFromModule locals labels returns m@Module {types, tables, mems, globals, imports} =
+    let tableImports = catMaybes $ map getTableType imports in
+    let memsImports = catMaybes $ map getMemType imports in
+    let globalImports = catMaybes $ map getGlobalType imports in
+    Ctx {
+        types,
+        funcs = getFuncTypes m,
+        tables = tableImports ++ map (\(Table t) -> t) tables,
+        mems = memsImports ++ map (\(Memory l) -> l) mems,
+        globals = globalImports ++ map (\(Global g _) -> g) globals,
+        locals,
+        labels,
+        returns,
+        importedGlobals = fromIntegral $ length globalImports
+    }
+    where
+        getTableType (Import _ _ (ImportTable tableType)) = Just tableType
+        getTableType _ = Nothing
+
+        getMemType (Import _ _ (ImportMemory lim)) = Just lim
+        getMemType _ = Nothing
+
+        getGlobalType (Import _ _ (ImportGlobal gl)) = Just gl
+        getGlobalType _ = Nothing
+
+isFunctionValid :: Function -> Validator
+isFunctionValid Function {funcType, localTypes = locals, body} mod@Module {types} =
+    if fromIntegral funcType < length types
+    then
+        let FuncType params results = types !! fromIntegral funcType in
+        if length results > 1
+        then Left InvalidResultArity
+        else do
+            let r = safeHead results
+            let ctx = ctxFromModule (params ++ locals) [r] r mod
+            arr <- runChecker ctx $ getExpressionType body
+            if isArrowMatch arr (empty ==> results)
+            then return ()
+            else Left $ TypeMismatch arr (empty ==> results)
+    else Left TypeIndexOutOfRange
+
+functionsShouldBeValid :: Validator
+functionsShouldBeValid mod@Module {functions} =
+    foldMap (flip isFunctionValid mod) functions
+
+tablesShouldBeValid :: Validator
+tablesShouldBeValid Module { imports, tables } =
+    let tableImports = filter isTableImport imports in
+    let res = foldMap (\Import { desc = ImportTable t } -> isValidTableType t) tableImports in
+    let res' = foldl' (\r (Table t) -> r <> isValidTableType t) res tables in
+    if length tableImports + length tables <= 1
+        then res'
+        else Left MoreThanOneTable
+    where
+        isValidTableType :: TableType -> ValidationResult
+        isValidTableType (TableType (Limit min max) _) =
+            if min <= fromMaybe min max
+            then return ()
+            else Left InvalidTableType
+
+memoryShouldBeValid :: Validator
+memoryShouldBeValid Module { imports, mems } =
+    let memImports = filter isMemImport imports in
+    let res = foldMap (\Import { desc = ImportMemory l } -> isValidLimit l) memImports in
+    let res' = foldl' (\r (Memory l) -> r <> isValidLimit l) res mems in
+    if length memImports + length mems <= 1
+        then res'
+        else Left MoreThanOneMemory
+    where
+        isValidLimit :: Limit -> ValidationResult
+        isValidLimit (Limit min max) =
+            let minMax = if min <= fromMaybe min max then return () else Left MinMoreThanMaxInMemoryLimit in
+            let maxLim = if fromMaybe min max <= 65536 then return () else Left MemoryLimitExceeded in
+            minMax <> maxLim
+
+globalsShouldBeValid :: Validator
+globalsShouldBeValid m@Module { imports, globals } =
+    let ctx = ctxFromModule [] [] Nothing m in
+    foldMap (isGlobalValid ctx) globals
+    where
+        getGlobalType :: GlobalType -> ValueType
+        getGlobalType (Const vt) = vt
+        getGlobalType (Mut vt) = vt
+
+        isGlobalValid :: Ctx -> Global -> ValidationResult
+        isGlobalValid ctx (Global gt init) = runChecker ctx $ do
+            isConstExpression init
+            t <- getExpressionType init
+            let expected = empty ==> getGlobalType gt
+            if isArrowMatch expected t then return () else throwError $ TypeMismatch t expected
+
+elemsShouldBeValid :: Validator
+elemsShouldBeValid m@Module { elems, functions, tables, imports } =
+    let ctx = ctxFromModule [] [] Nothing m in
+    foldMap (isElemValid ctx) elems
+    where
+        isElemValid :: Ctx -> ElemSegment -> ValidationResult
+        isElemValid ctx (ElemSegment tableIdx offset funs) =
+            let check = runChecker ctx $ do
+                    isConstExpression offset
+                    t <- getExpressionType offset
+                    if isArrowMatch (empty ==> I32) t
+                    then return ()
+                    else throwError $ TypeMismatch t (empty ==> I32) 
+            in
+            let tableImports = filter isTableImport imports in
+            let isTableIndexValid =
+                    if tableIdx < (fromIntegral $ length tableImports + length tables)
+                    then return ()
+                    else Left TableIndexOutOfRange
+            in
+            let funImports = filter isFuncImport imports in
+            let funsLength = fromIntegral $ length functions + length funImports in
+            let isFunsValid = foldMap (\i -> if i < funsLength then return () else Left FunctionIndexOutOfRange) funs in
+            check <> isFunsValid <> isTableIndexValid
+
+datasShouldBeValid :: Validator
+datasShouldBeValid m@Module { datas, mems, imports } =
+    let ctx = ctxFromModule [] [] Nothing m in
+    foldMap (isDataValid ctx) datas
+    where
+        isDataValid :: Ctx -> DataSegment -> ValidationResult
+        isDataValid ctx (DataSegment memIdx offset _) =
+            let check = runChecker ctx $ do
+                    isConstExpression offset
+                    t <- getExpressionType offset
+                    if isArrowMatch (empty ==> I32) t
+                    then return ()
+                    else throwError $ TypeMismatch t (empty ==> I32) 
+            in
+            let memImports = filter isMemImport imports in
+            if memIdx < (fromIntegral $ length memImports + length mems)
+            then check
+            else Left MemoryIndexOutOfRange
+
+startShouldBeValid :: Validator
+startShouldBeValid Module { start = Nothing } = return ()
+startShouldBeValid m@Module { start = Just (StartFunction idx) } =
+    let types = getFuncTypes m in
+    let i = fromIntegral idx in
+    if length types > i
+    then if FuncType [] [] == types !! i then return () else Left InvalidStartFunctionType
+    else Left FunctionIndexOutOfRange
+
+exportsShouldBeValid :: Validator
+exportsShouldBeValid Module { exports, imports, functions, mems, tables, globals } =
+    areExportNamesUnique <> foldMap isExportValid exports
+    where
+        funcImports = filter isFuncImport imports
+        tableImports = filter isTableImport imports
+        memImports = filter isMemImport imports
+        globalImports = filter isGlobalImport imports
+
+        isExportValid :: Export -> ValidationResult
+        isExportValid (Export _ (ExportFunc funIdx)) =
+            if fromIntegral funIdx < length funcImports + length functions then return () else Left FunctionIndexOutOfRange
+        isExportValid (Export _ (ExportTable tableIdx)) =
+            if fromIntegral tableIdx < length tableImports + length tables then return () else Left TableIndexOutOfRange
+        isExportValid (Export _ (ExportMemory memIdx)) =
+            if fromIntegral memIdx < length memImports + length mems then return () else Left MemoryIndexOutOfRange
+        isExportValid (Export _ (ExportGlobal globalIdx)) =
+            if fromIntegral globalIdx < length globalImports + length globals
+            then (
+                if fromIntegral globalIdx >= length globalImports
+                then (
+                    case globals !! (fromIntegral globalIdx - length globalImports) of
+                        (Global (Mut _) _) -> Left ExportedGlobalIsNotConst
+                        _ -> return ()
+                )
+                else return ()
+            )
+            else Left GlobalIndexOutOfRange
+
+        areExportNamesUnique :: ValidationResult
+        areExportNamesUnique =
+            case foldl' go (Set.empty, []) exports of
+                (_, []) -> return ()
+                (_, dup) -> Left $ DuplicatedExportNames dup
+            where
+                go :: (Set.Set TL.Text, [String]) -> Export -> (Set.Set TL.Text, [String])
+                go (set, dup) (Export name _) =
+                    if Set.member name set
+                    then (set, show name : dup)
+                    else (Set.insert name set, dup)
+
+importsShouldBeValid :: Validator
+importsShouldBeValid Module { imports, types } =
+    foldMap isImportValid imports
+    where
+        isImportValid :: Import -> ValidationResult
+        isImportValid (Import _ _ (ImportFunc typeIdx)) =
+            if fromIntegral typeIdx < length types
+            then return ()
+            else Left TypeIndexOutOfRange
+        isImportValid (Import _ _ (ImportTable _)) = return () -- checked in tables section
+        isImportValid (Import _ _ (ImportMemory _)) = return () -- checked in mems section
+        isImportValid (Import _ _ (ImportGlobal (Const _))) = return ()
+        isImportValid (Import _ _ (ImportGlobal (Mut _))) = Left ImportedGlobalIsNotConst
+
+typesShouldBeValid :: Validator
+typesShouldBeValid Module { types } = foldMap isTypeValid types
+    where
+        isTypeValid :: FuncType -> ValidationResult
+        isTypeValid FuncType { results } = if length results <= 1 then return () else Left InvalidResultArity
+
+newtype ValidModule = ValidModule { getModule :: Module } deriving (Show, Eq)
+
+validate :: Module -> Either ValidationError ValidModule
+validate mod = const (ValidModule mod) <$> foldMap ($ mod) validators
+    where
+        validators :: [Validator]
+        validators = [
+                typesShouldBeValid,
+                functionsShouldBeValid,
+                tablesShouldBeValid,
+                memoryShouldBeValid,
+                globalsShouldBeValid,
+                elemsShouldBeValid,
+                datasShouldBeValid,
+                startShouldBeValid,
+                exportsShouldBeValid,
+                importsShouldBeValid
+            ]
diff --git a/tests/Test.hs b/tests/Test.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Main (
+  main
+) where
+
+import Test.Tasty
+import Test.Tasty.HUnit
+
+import qualified System.Directory as Directory
+
+import qualified Data.ByteString.Lazy as LBS
+
+import qualified Language.Wasm as Wasm
+import qualified Language.Wasm.Script as Script
+
+main :: IO ()
+main = do
+  files <- Directory.listDirectory "tests/samples"
+  scriptTestCases <- (`mapM` files) $ \file -> do
+    Right script <- Wasm.parseScript <$> LBS.readFile ("tests/samples/" ++ file)
+    return $ testCase file $ do
+      Script.runScript (\msg assert -> assertFailure ("Failed assert: " ++ msg ++ ". Assert " ++ show assert)) script
+  defaultMain $ testGroup "Wasm Core Test Suit" scriptTestCases
diff --git a/wasm.cabal b/wasm.cabal
new file mode 100644
--- /dev/null
+++ b/wasm.cabal
@@ -0,0 +1,98 @@
+name:           wasm
+version:        1.0.0
+author:         Ilya Rezvov
+maintainer:     Ilya Rezvov <rezvov.ilya@gmail.com>
+license:        MIT
+license-file:   LICENSE
+category:       Compilers/Interpreters
+homepage:       https://github.com/SPY/haskell-wasm/
+bug-reports:    https://github.com/SPY/haskell-wasm/issues
+synopsis:       WebAssembly Language Toolkit and Interpreter
+description:    This package contains fully spec-compatible tooling for WebAssembly.
+                Features include:
+                .
+                * WebAssembly Text Representation Parser
+                .
+                * WebAssembly Binary Representation encoder and decoder
+                .
+                * Spec-compatible Module validator (checked with Spec Core Test Suite)
+                .
+                * Spec-compatible Interpreter (checked with Spec Core Test Suite)
+                .
+                * Extended scipting grammar parser and executor
+                .
+                * WebAssembly Module building eDSL
+build-type:     Simple
+cabal-version:  >= 1.10
+
+extra-source-files:
+    src/Language/Wasm/Lexer.x
+    src/Language/Wasm/Parser.y
+
+library
+  hs-source-dirs:
+      src
+  ghc-options: -Wwarn -fwarn-incomplete-patterns -fwarn-unused-imports
+  build-depends:
+      array >=0.5 && <0.6
+    , base >=4.6 && <5.0
+    , bytestring >=0.10
+    , containers >=0.5 && <0.6
+    , mtl >=2.2 && <3.0
+    , text >=1.1
+    , transformers >=0.4 && <0.6
+    , utf8-string >=1.0
+    , cereal >= 0.5
+    , vector >= 0.12
+    , ieee754 >= 0.8
+    , deepseq >= 1.4
+  build-tools:
+      alex >=3.1.3
+    , happy >=1.9.4
+  exposed-modules:
+      Language.Wasm.Lexer
+      Language.Wasm.Parser
+      Language.Wasm.Structure
+      Language.Wasm.Binary
+      Language.Wasm.Validate
+      Language.Wasm.Interpreter
+      Language.Wasm.Script
+      Language.Wasm.FloatUtils
+      Language.Wasm.Builder
+      Language.Wasm
+  other-modules:
+      Paths_wasm
+  default-language: Haskell2010
+
+executable wasm
+  main-is: Main.hs
+  hs-source-dirs: exec
+  build-depends:
+      base >=4.6 && <5.0
+    , wasm
+    , optparse-applicative >= 0.14
+    , bytestring >=0.10 && <0.11
+    , base64-bytestring >= 1.0
+  default-language: Haskell2010
+
+test-suite test
+  type: exitcode-stdio-1.0
+  main-is: Test.hs
+  hs-source-dirs:
+      tests
+  build-depends:
+      base >=4.6 && <5.0
+    , bytestring >=0.10 && <0.11
+    , filepath >=1.3 && <1.5
+    , directory >= 1.3
+    , mtl ==2.2.1
+    , tasty >=0.7
+    , tasty-hunit >=0.4.1 && <0.10
+    , text >=1.1 && <1.3
+    , wasm
+  build-tools:
+      alex >=3.1.3
+    , happy >=1.9.4
+  other-modules:
+      Paths_wasm
+  default-language: Haskell2010
