wasm (empty) → 1.0.0
raw patch · 17 files changed
+15523/−0 lines, 17 filesdep +arraydep +basedep +base64-bytestringsetup-changed
Dependencies added: array, base, base64-bytestring, bytestring, cereal, containers, deepseq, directory, filepath, ieee754, mtl, optparse-applicative, tasty, tasty-hunit, text, transformers, utf8-string, vector, wasm
Files
- LICENSE +22/−0
- Setup.hs +2/−0
- dist/build/Language/Wasm/Lexer.hs +1413/−0
- dist/build/Language/Wasm/Parser.hs +7182/−0
- exec/Main.hs +148/−0
- src/Language/Wasm.hs +48/−0
- src/Language/Wasm/Binary.hs +841/−0
- src/Language/Wasm/Builder.hs +1026/−0
- src/Language/Wasm/FloatUtils.hs +44/−0
- src/Language/Wasm/Interpreter.hs +1109/−0
- src/Language/Wasm/Lexer.x +437/−0
- src/Language/Wasm/Parser.y +1943/−0
- src/Language/Wasm/Script.hs +252/−0
- src/Language/Wasm/Structure.hs +284/−0
- src/Language/Wasm/Validate.hs +651/−0
- tests/Test.hs +23/−0
- wasm.cabal +98/−0
+ LICENSE view
@@ -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.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ dist/build/Language/Wasm/Lexer.hs view
@@ -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.+
+ dist/build/Language/Wasm/Parser.hs view
@@ -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.+
+ exec/Main.hs view
@@ -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.")
+ src/Language/Wasm.hs view
@@ -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
+ src/Language/Wasm/Binary.hs view
@@ -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
+ src/Language/Wasm/Builder.hs view
@@ -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 ()
+ src/Language/Wasm/FloatUtils.hs view
@@ -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
+ src/Language/Wasm/Interpreter.hs view
@@ -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"
+ src/Language/Wasm/Lexer.x view
@@ -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+}
+ src/Language/Wasm/Parser.y view
@@ -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 _ [] = []+}
+ src/Language/Wasm/Script.hs view
@@ -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
+ src/Language/Wasm/Structure.hs view
@@ -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 = []+}
+ src/Language/Wasm/Validate.hs view
@@ -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+ ]
+ tests/Test.hs view
@@ -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
+ wasm.cabal view
@@ -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