haskell-src-exts 0.2.1 → 0.3.2
raw patch · 21 files changed
+11143/−12131 lines, 21 filesnew-uploader
Files
- LICENSE +80/−58
- Language/Haskell/Exts.hs +25/−0
- Language/Haskell/Exts/Build.hs +235/−0
- Language/Haskell/Exts/Lexer.hs +812/−0
- Language/Haskell/Exts/ParseMonad.hs +292/−0
- Language/Haskell/Exts/ParseUtils.hs +601/−0
- Language/Haskell/Exts/Parser.hs +5885/−0
- Language/Haskell/Exts/Parser.ly +1261/−0
- Language/Haskell/Exts/Pretty.hs +1083/−0
- Language/Haskell/Exts/Syntax.hs +852/−0
- Language/Haskell/Hsx.hs +0/−27
- Language/Haskell/Hsx/Build.hs +0/−235
- Language/Haskell/Hsx/Lexer.hs +0/−808
- Language/Haskell/Hsx/ParseMonad.hs +0/−292
- Language/Haskell/Hsx/ParseUtils.hs +0/−542
- Language/Haskell/Hsx/Parser.hs +0/−5426
- Language/Haskell/Hsx/Parser.ly +0/−1167
- Language/Haskell/Hsx/Pretty.hs +0/−985
- Language/Haskell/Hsx/Syntax.hs +0/−794
- Language/Haskell/Hsx/Transform.hs +0/−1780
- haskell-src-exts.cabal +17/−17
LICENSE view
@@ -1,77 +1,99 @@- [1]Return to the main page+This library (Haskell Source eXtensions) is derived from code from several+sources: -Licence document for the haskell-harp package+ * Code from the GHC project which is largely (c) The University of+ Glasgow, and distributable under a BSD-style license (see below), - --------------------------------------------------------------------------+ * Code from the Haskell 98 Report which is (c) Simon Peyton Jones+ and freely redistributable (but see the full license for+ restrictions). - Copyright 2004, Niklas Broberg. All rights reserved.+The full text of these licenses is reproduced below. All of the+licenses are BSD-style or compatible. - Redistribution and use in source and binary forms, with or without- modification, are permitted provided that the following conditions are- met:+-----------------------------------------------------------------------------+The haskell-src-exts package itself is distributable under the +modified BSD license: - * Redistributions of source code must retain the above copyright notice,- this list of conditions and the following disclaimer.- * Redistributions in binary form must reproduce the above copyright- notice, this list of conditions and the following disclaimer in the- documentation and/or other materials provided with the distribution.+Copyright (c) 2005, Niklas Broberg+All rights reserved. - This software is provided by the copyright holders "as is" and any express- or implied warranties, including, but not limited to, the implied- warranties of merchantability and fitness for a particular purpose are- disclaimed. In no event shall the copyright holders be liable for any- direct, indirect, incidental, special, exemplary, or consequential damages- (including, but not limited to, procurement of substitute goods or- services; loss of use, data, or profits; or business interruption) however- caused and on any theory of liability, whether in contract, strict- liability, or tort (including negligence or otherwise) arising in any way- out of the use of this software, even if advised of the possibility of- such damage.+Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are+met: - --------------------------------------------------------------------------+ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer. - This library is based on code from the Glasgow Haskell Compiler, which is- usable and redistributable under the following licence:+ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution. - The Glasgow Haskell Compiler License+ * The names of its contributors may not be used to endorse or + promote products derived from this software without specific prior + written permission. - Copyright 2002, The University Court of the University of Glasgow. All- rights reserved.+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - Redistribution and use in source and binary forms, with or without- modification, are permitted provided that the following conditions are- met:+----------------------------------------------------------------------------- - - Redistributions of source code must retain the above copyright notice,- this list of conditions and the following disclaimer.+The Glasgow Haskell Compiler License - - Redistributions in binary form must reproduce the above copyright- notice, this list of conditions and the following disclaimer in the- documentation and/or other materials provided with the distribution.+Copyright 2004, The University Court of the University of Glasgow. +All rights reserved. - - Neither name of the University nor the names of its contributors may be- used to endorse or promote products derived from this software without- specific prior written permission.+Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met: - THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF- GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO- EVENT SHALL THE UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.+- Redistributions of source code must retain the above copyright notice,+this list of conditions and the following disclaimer.+ +- Redistributions in binary form must reproduce the above copyright notice,+this list of conditions and the following disclaimer in the documentation+and/or other materials provided with the distribution.+ +- Neither name of the University nor the names of its contributors may be+used to endorse or promote products derived from this software without+specific prior written permission. - --------------------------------------------------------------------------+THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF+GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH+DAMAGE. - [2]Return to the main page+----------------------------------------------------------------------------- -References+Code derived from the document "Report on the Programming Language+Haskell 98", is distributed under the following license: - Visible links- 1. http://www.cs.chalmers.se/~d00nibro/harp/index.html- 2. http://www.cs.chalmers.se/~d00nibro/harp/index.html+ Copyright (c) 2002 Simon Peyton Jones++ The authors intend this Report to belong to the entire Haskell+ community, and so we grant permission to copy and distribute it for+ any purpose, provided that it is reproduced in its entirety,+ including this Notice. Modified versions of this Report may also be+ copied and distributed for any purpose, provided that the modified+ version is clearly presented as such, and that it does not claim to+ be a definition of the Haskell 98 Language.++-----------------------------------------------------------------------------+
+ Language/Haskell/Exts.hs view
@@ -0,0 +1,25 @@+module Language.Haskell.Exts (+ module Language.Haskell.Exts.Syntax+ , module Language.Haskell.Exts.Build+ , module Language.Haskell.Exts.Parser+ , module Language.Haskell.Exts.Pretty+ , parseFileContents+ , parseFileContentsWithMode+ , parseFile+ ) where++import Language.Haskell.Exts.Build+import Language.Haskell.Exts.Syntax+import Language.Haskell.Exts.Parser+import Language.Haskell.Exts.Pretty++parseFile :: FilePath -> IO (ParseResult HsModule)+parseFile fp = readFile fp >>= (return . parseFileContentsWithMode (ParseMode fp))++parseFileContents :: String -> ParseResult HsModule+parseFileContents = parseFileContentsWithMode defaultParseMode++parseFileContentsWithMode :: ParseMode -> String -> ParseResult HsModule+parseFileContentsWithMode p rawStr =+ let cleanStr = unlines [ s | s@(c:_) <- lines rawStr, c /= '#' ]+ in parseModuleWithMode p cleanStr
+ Language/Haskell/Exts/Build.hs view
@@ -0,0 +1,235 @@+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Build+-- Original : Language.Haskell.Syntax+-- Copyright : (c) The GHC Team, 1997-2000,+-- (c) Niklas Broberg 2004+-- License : BSD-style (see the file LICENSE.txt)+-- +-- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se+-- Stability : experimental+-- Portability : portable+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Build (++ -- * Syntax building functions+ name, -- :: String -> HsName+ sym, -- :: String -> HsName+ var, -- :: HsName -> HsExp+ op, -- :: HsName -> HsQOp+ qvar, -- :: Module -> HsName -> HsExp+ pvar, -- :: HsName -> HsPat+ app, -- :: HsExp -> HsExp -> HsExp+ infixApp, -- :: HsExp -> HsQOp -> HsExp -> HsExp+ appFun, -- :: HsExp -> [HsExp] -> HsExp+ pApp, -- :: HsName -> [HsPat] -> HsPat+ tuple, -- :: [HsExp] -> HsExp+ pTuple, -- :: [HsPat] -> HsPat+ varTuple, -- :: [HsName] -> HsExp+ pvarTuple, -- :: [HsName] -> HsPat+ function, -- :: String -> HsExp+ strE, -- :: String -> HsExp+ charE, -- :: Char -> HsExp+ intE, -- :: Integer -> HsExp+ strP, -- :: String -> HsPat+ charP, -- :: Char -> HsPat+ intP, -- :: Integer -> HsPat+ doE, -- :: [HsStmt] -> HsExp+ lamE, -- :: SrcLoc -> [HsPat] -> HsExp -> HsExp+ letE, -- :: [HsDecl] -> HsExp -> HsExp+ caseE, -- :: HsExp -> [HsAlt] -> HsExp+ alt, -- :: SrcLoc -> HsPat -> HsExp -> HsAlt+ altGW, -- :: SrcLoc -> HsPat -> [HsStmt] -> HsExp -> HsBinds -> HsAlt+ listE, -- :: [HsExp] -> HsExp+ eList, -- :: HsExp+ peList, -- :: HsPat+ paren, -- :: HsExp -> HsExp+ pParen, -- :: HsPat -> HsPat+ qualStmt, -- :: HsExp -> HsStmt+ genStmt, -- :: SrcLoc -> HsPat -> HsExp -> HsStmt+ letStmt, -- :: [HsDecl] -> HsStmt+ binds, -- :: [HsDecl] -> HsBinds+ noBinds, -- :: HsBinds+ wildcard, -- :: HsPat+ genNames, -- :: String -> Int -> [HsName]+ + -- * More advanced building+ sfun, -- :: SrcLoc -> HsName -> [HsName] -> HsRhs -> HsBinds -> HsDecl+ simpleFun, -- :: SrcLoc -> HsName -> HsName -> HsExp -> HsDecl+ patBind, -- :: SrcLoc -> HsPat -> HsExp -> HsDecl+ patBindWhere, -- :: SrcLoc -> HsPat -> HsExp -> [HsDecl] -> HsDecl+ nameBind, -- :: SrcLoc -> HsName -> HsExp -> HsDecl+ metaFunction, -- :: String -> [HsExp] -> HsExp+ metaConPat -- :: String -> [HsPat] -> HsPat+ ) where++import Language.Haskell.Exts.Syntax++-----------------------------------------------------------------------------+-- Help functions for Abstract syntax ++name :: String -> HsName+name = HsIdent++sym :: String -> HsName+sym = HsSymbol++var :: HsName -> HsExp+var = HsVar . UnQual++op :: HsName -> HsQOp+op = HsQVarOp . UnQual++qvar :: Module -> HsName -> HsExp+qvar m n = HsVar $ Qual m n++pvar :: HsName -> HsPat+pvar = HsPVar++app :: HsExp -> HsExp -> HsExp+app = HsApp++infixApp :: HsExp -> HsQOp -> HsExp -> HsExp+infixApp = HsInfixApp++appFun :: HsExp -> [HsExp] -> HsExp+appFun f [] = f+appFun f (a:as) = appFun (app f a) as++pApp :: HsName -> [HsPat] -> HsPat+pApp n ps = HsPApp (UnQual n) ps++tuple :: [HsExp] -> HsExp+tuple = HsTuple++pTuple :: [HsPat] -> HsPat+pTuple = HsPTuple++varTuple :: [HsName] -> HsExp+varTuple ns = tuple $ map var ns++pvarTuple :: [HsName] -> HsPat+pvarTuple ns = pTuple $ map pvar ns++function :: String -> HsExp+function = var . HsIdent++strE :: String -> HsExp+strE = HsLit . HsString++charE :: Char -> HsExp+charE = HsLit . HsChar++intE :: Integer -> HsExp+intE = HsLit . HsInt++strP :: String -> HsPat+strP = HsPLit . HsString++charP :: Char -> HsPat+charP = HsPLit . HsChar++intP :: Integer -> HsPat+intP = HsPLit . HsInt++doE :: [HsStmt] -> HsExp+doE = HsDo++lamE :: SrcLoc -> [HsPat] -> HsExp -> HsExp+lamE = HsLambda++letE :: [HsDecl] -> HsExp -> HsExp+letE ds e = HsLet (binds ds) e++caseE :: HsExp -> [HsAlt] -> HsExp+caseE = HsCase++alt :: SrcLoc -> HsPat -> HsExp -> HsAlt+alt s p e = HsAlt s p (HsUnGuardedAlt e) noBinds++altGW :: SrcLoc -> HsPat -> [HsStmt] -> HsExp -> HsBinds -> HsAlt+altGW s p gs e w = HsAlt s p (gAlt s gs e) w++unGAlt :: HsExp -> HsGuardedAlts+unGAlt = HsUnGuardedAlt++gAlts :: SrcLoc -> [([HsStmt],HsExp)] -> HsGuardedAlts+gAlts s as = HsGuardedAlts $ map (\(gs,e) -> HsGuardedAlt s gs e) as++gAlt :: SrcLoc -> [HsStmt] -> HsExp -> HsGuardedAlts+gAlt s gs e = gAlts s [(gs,e)]++listE :: [HsExp] -> HsExp+listE = HsList++eList :: HsExp+eList = HsList []++peList :: HsPat+peList = HsPList []++paren :: HsExp -> HsExp+paren = HsParen++pParen :: HsPat -> HsPat+pParen = HsPParen++qualStmt :: HsExp -> HsStmt+qualStmt = HsQualifier++genStmt :: SrcLoc -> HsPat -> HsExp -> HsStmt+genStmt = HsGenerator++letStmt :: [HsDecl] -> HsStmt+letStmt ds = HsLetStmt $ binds ds++binds :: [HsDecl] -> HsBinds+binds = HsBDecls++noBinds :: HsBinds+noBinds = binds []++wildcard :: HsPat+wildcard = HsPWildCard++genNames :: String -> Int -> [HsName]+genNames s k = [ HsIdent $ s ++ show i | i <- [1..k] ]++-------------------------------------------------------------------------------+-- Some more specialised help functions ++-- | A function with a single "match"+sfun :: SrcLoc -> HsName -> [HsName] -> HsRhs -> HsBinds -> HsDecl+sfun s f pvs rhs bs = HsFunBind [HsMatch s f (map pvar pvs) rhs bs]++-- | A function with a single "match", a single argument, no guards+-- and no where declarations+simpleFun :: SrcLoc -> HsName -> HsName -> HsExp -> HsDecl+simpleFun s f a e = let rhs = HsUnGuardedRhs e+ in sfun s f [a] rhs noBinds++-- | A pattern bind where the pattern is a variable, and where+-- there are no guards and no 'where' clause.+patBind :: SrcLoc -> HsPat -> HsExp -> HsDecl+patBind s p e = let rhs = HsUnGuardedRhs e+ in HsPatBind s p rhs noBinds++patBindWhere :: SrcLoc -> HsPat -> HsExp -> [HsDecl] -> HsDecl+patBindWhere s p e ds = let rhs = HsUnGuardedRhs e+ in HsPatBind s p rhs (binds ds)++nameBind :: SrcLoc -> HsName -> HsExp -> HsDecl+nameBind s n e = patBind s (pvar n) e++-- meta-level functions, i.e. functions that represent functions, +-- and that take arguments representing arguments... whew!+metaFunction :: String -> [HsExp] -> HsExp+metaFunction s es = mf s (reverse es)+ where mf s [] = var $ name s+ mf s (e:es) = app (mf s es) e+++metaConPat :: String -> [HsPat] -> HsPat+metaConPat s ps = pApp (name s) ps
+ Language/Haskell/Exts/Lexer.hs view
@@ -0,0 +1,812 @@+-- #hide+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Lexer+-- Original : Language.Haskell.Lexer+-- Copyright : (c) The GHC Team, 1997-2000+-- (c) Niklas Broberg, 2004+-- License : BSD-style (see the file LICENSE.txt)+-- +-- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se+-- Stability : experimental+-- Portability : portable+--+-- Lexer for Haskell, with some extensions.+--+-----------------------------------------------------------------------------++-- ToDo: Introduce different tokens for decimal, octal and hexadecimal (?)+-- ToDo: FloatTok should have three parts (integer part, fraction, exponent) (?)+-- ToDo: Use a lexical analyser generator (lx?)++module Language.Haskell.Exts.Lexer (Token(..), lexer) where++import Language.Haskell.Exts.ParseMonad++import Data.Char+import Data.Ratio++data Token+ = VarId String+ | QVarId (String,String)+ | IDupVarId (String) -- duplicable implicit parameter+ | ILinVarId (String) -- linear implicit parameter+ | ConId String+ | QConId (String,String)+ | DVarId [String] -- to enable varid's with '-' in them+ | VarSym String+ | ConSym String+ | QVarSym (String,String)+ | QConSym (String,String)+ | IntTok Integer+ | FloatTok Rational+ | Character Char+ | StringTok String++-- Symbols++ | LeftParen+ | RightParen+ | LeftHashParen+ | RightHashParen+ | SemiColon+ | LeftCurly+ | RightCurly+ | VRightCurly -- a virtual close brace+ | LeftSquare+ | RightSquare+ | Comma+ | Underscore+ | BackQuote++-- Reserved operators++ | Dot -- reserved for use with 'forall x . x'+ | DotDot+ | Colon+ | DoubleColon+ | Equals+ | Backslash+ | Bar+ | LeftArrow+ | RightArrow+ | At+ | Tilde+ | DoubleArrow+ | Minus+ | Exclamation+ | Star+ +-- Template Haskell+ | THExpQuote -- [| or [e|+ | THPatQuote -- [p|+ | THDecQuote -- [d|+ | THTypQuote -- [t| + | THCloseQuote -- |]+ | THIdEscape (String) -- $x+ | THParenEscape -- $( + | THReifyType+ | THReifyDecl+ | THReifyFixity++-- HaRP+ | RPOpen -- [/+ | RPClose -- /]+ | RPSeqOpen -- (/+ | RPSeqClose -- /)+ | RPStar -- *+ | RPStarG -- *!+ | RPOpt -- ?+ | RPOptG -- ?!+ | RPPlus -- ++ | RPPlusG -- +!+ | RPEither -- |+ | RPCAt -- @:++-- Hsx+ | XCodeTagOpen -- <%+ | XCodeTagClose -- %>+ | XStdTagOpen -- <+ | XStdTagClose -- >+ | XCloseTagOpen -- </+ | XEmptyTagClose -- />+ | XPcdata String++-- Reserved Ids++ | KW_As+ | KW_Case+ | KW_Class+ | KW_Data+ | KW_Default+ | KW_Deriving+ | KW_DLet -- implictit parameter binding+ | KW_Do+ | KW_MDo+ | KW_Else+ | KW_Family -- indexed type families+ | KW_Forall -- universal/existential types+ | KW_Hiding+ | KW_If+ | KW_Import+ | KW_In+ | KW_Infix+ | KW_InfixL+ | KW_InfixR+ | KW_Instance+ | KW_Let+ | KW_Module+ | KW_NewType+ | KW_Of+ | KW_Then+ | KW_Type+ | KW_Where+ | KW_With -- implicit parameter binding+ | KW_Qualified++ -- FFI+ | KW_Foreign+ | KW_Export+ | KW_Safe+ | KW_Unsafe+ | KW_Threadsafe+ | KW_StdCall+ | KW_CCall++ | EOF+ deriving (Eq,Show)++reserved_ops :: [(String,Token)]+reserved_ops = [+ ( ".", Dot ),+ ( "..", DotDot ),+ ( ":", Colon ),+ ( "::", DoubleColon ),+ ( "=", Equals ),+ ( "\\", Backslash ),+ ( "|", Bar ),+ ( "<-", LeftArrow ),+ ( "->", RightArrow ),+ ( "@", At ),+ ( "~", Tilde ),+ ( "=>", DoubleArrow ),+ ( "*", Star )+ ]++special_varops :: [(String,Token)]+special_varops = [+ ( "-", Minus ), --ToDo: shouldn't be here+ ( "!", Exclamation ) --ditto+ ]++reserved_ids :: [(String,Token)]+reserved_ids = [+ ( "_", Underscore ),+ ( "case", KW_Case ),+ ( "class", KW_Class ),+ ( "data", KW_Data ),+ ( "default", KW_Default ),+ ( "deriving", KW_Deriving ),+ ( "dlet", KW_DLet ), -- implicit parameters (hugs)+ ( "do", KW_Do ),+ ( "else", KW_Else ),+ ( "family", KW_Family ), -- indexed type families+ ( "forall", KW_Forall ), -- universal/existential quantification+ ( "if", KW_If ),+ ( "import", KW_Import ),+ ( "in", KW_In ),+ ( "infix", KW_Infix ),+ ( "infixl", KW_InfixL ),+ ( "infixr", KW_InfixR ),+ ( "instance", KW_Instance ),+ ( "let", KW_Let ),+ ( "mdo", KW_MDo ),+ ( "module", KW_Module ),+ ( "newtype", KW_NewType ),+ ( "of", KW_Of ),+ ( "then", KW_Then ),+ ( "type", KW_Type ),+ ( "where", KW_Where ),+ ( "with", KW_With ), -- implicit parameters++-- Template Haskell+ ( "reifyDecl", THReifyDecl ),+ ( "reifyType", THReifyType ),+ ( "reifyFixity", THReifyFixity ),++-- FFI+ ( "foreign", KW_Foreign )+ ]+++special_varids :: [(String,Token)]+special_varids = [+ ( "as", KW_As ),+ ( "qualified", KW_Qualified ),+ ( "hiding", KW_Hiding ),++-- FFI+ ( "export", KW_Export),+ ( "safe", KW_Safe),+ ( "unsafe", KW_Unsafe),+ ( "threadsafe", KW_Threadsafe),+ ( "stdcall", KW_StdCall),+ ( "ccall", KW_CCall)+ ]++isIdent, isHSymbol :: Char -> Bool+isIdent c = isAlpha c || isDigit c || c == '\'' || c == '_'+isHSymbol c = elem c ":!#$%&*+./<=>?@\\^|-~"++matchChar :: Char -> String -> Lex a ()+matchChar c msg = do+ s <- getInput+ if null s || head s /= c then fail msg else discard 1++-- The top-level lexer.+-- We need to know whether we are at the beginning of the line to decide+-- whether to insert layout tokens.++lexer :: (Token -> P a) -> P a+lexer = runL $ do+ bol <- checkBOL+ (bol, ws) <- lexWhiteSpace bol+ -- take care of whitespace in PCDATA+ ec <- getExtContext+ case ec of+ -- if there was no linebreak, and we are lexing PCDATA,+ -- then we want to care about the whitespace+ Just ChildCtxt | not bol && ws -> return $ XPcdata " "+ _ -> do startToken+ if bol then lexBOL else lexToken ++lexWhiteSpace :: Bool -> Lex a (Bool, Bool)+lexWhiteSpace bol = do+ s <- getInput+ case s of+ '{':'-':_ -> do+ discard 2+ bol <- lexNestedComment bol+ (bol, _) <- lexWhiteSpace bol+ return (bol, True)+ '-':'-':s | all (== '-') (takeWhile isHSymbol s) -> do+ lexWhile (== '-')+ lexWhile (/= '\n')+ lexNewline+ lexWhiteSpace True+ return (True, True)+ '\n':_ -> do+ lexNewline+ lexWhiteSpace True+ return (True, True)+ '\t':_ -> do+ lexTab+ (bol, _) <- lexWhiteSpace bol+ return (bol, True) + c:_ | isSpace c -> do+ discard 1+ (bol, _) <- lexWhiteSpace bol+ return (bol, True)+ _ -> return (bol, False)++lexNestedComment :: Bool -> Lex a Bool+lexNestedComment bol = do+ s <- getInput+ case s of+ '-':'}':_ -> discard 2 >> return bol+ '{':'-':_ -> do+ discard 2+ bol <- lexNestedComment bol -- rest of the subcomment+ lexNestedComment bol -- rest of this comment+ '\t':_ -> lexTab >> lexNestedComment bol+ '\n':_ -> lexNewline >> lexNestedComment True+ _:_ -> discard 1 >> lexNestedComment bol+ [] -> fail "Unterminated nested comment"++-- When we are lexing the first token of a line, check whether we need to+-- insert virtual semicolons or close braces due to layout.++lexBOL :: Lex a Token+lexBOL = do+ pos <- getOffside+ case pos of+ LT -> do+ -- trace "layout: inserting '}'\n" $+ -- Set col to 0, indicating that we're still at the+ -- beginning of the line, in case we need a semi-colon too.+ -- Also pop the context here, so that we don't insert+ -- another close brace before the parser can pop it.+ setBOL+ popContextL "lexBOL"+ return VRightCurly+ EQ ->+ -- trace "layout: inserting ';'\n" $+ return SemiColon+ GT ->+ lexToken++lexToken :: Lex a Token+lexToken = do+ ec <- getExtContext+ case ec of+ Just HarpCtxt -> lexHarpToken+ Just TagCtxt -> lexTagCtxt+ Just CloseTagCtxt -> lexCloseTagCtxt+ Just ChildCtxt -> lexChildCtxt+ Just CodeTagCtxt -> lexCodeTagCtxt+ _ -> lexStdToken+++lexChildCtxt :: Lex a Token+lexChildCtxt = do+ s <- getInput+ case s of+ '<':'%':_ -> do discard 2+ pushExtContextL CodeTagCtxt+ return XCodeTagOpen+ '<':'/':_ -> do discard 2+ popExtContextL "lexChildCtxt"+ pushExtContextL CloseTagCtxt+ return XCloseTagOpen+ '<':_ -> do discard 1+ pushExtContextL TagCtxt+ return XStdTagOpen+ '[':'/':_ -> do discard 2+ pushExtContextL HarpCtxt+ return RPOpen+ _ -> lexPCDATA+++lexPCDATA :: Lex a Token+lexPCDATA = do+ s <- getInput+ case s of+ [] -> return EOF+ _ -> case s of+ '\n':_ -> do+ x <- lexNewline >> lexPCDATA+ case x of+ XPcdata p -> return $ XPcdata $ '\n':p+ EOF -> return EOF+ '<':_ -> return $ XPcdata ""+ '[':'/':_ -> return $ XPcdata ""+ '[':s' -> do discard 1+ pcd <- lexPCDATA+ case pcd of+ XPcdata pcd' -> return $ XPcdata $ '[':pcd'+ EOF -> return EOF+ _ -> do let pcd = takeWhile (\c -> not $ elem c "<[\n") s+ l = length pcd+ discard l+ x <- lexPCDATA+ case x of+ XPcdata pcd' -> return $ XPcdata $ pcd ++ pcd'+ EOF -> return EOF+++lexCodeTagCtxt :: Lex a Token+lexCodeTagCtxt = do+ s <- getInput+ case s of+ '%':'>':_ -> do discard 2+ popExtContextL "lexCodeTagContext"+ return XCodeTagClose+ _ -> lexStdToken++lexCloseTagCtxt :: Lex a Token+lexCloseTagCtxt = do+ s <- getInput+ case s of+ '>':_ -> do discard 1+ popExtContextL "lexCloseTagCtxt"+ return XStdTagClose+ _ -> lexStdToken++lexTagCtxt :: Lex a Token+lexTagCtxt = do+ s <- getInput+ case s of+ '/':'>':_ -> do discard 2+ popExtContextL "lexTagCtxt: Empty tag"+ return XEmptyTagClose+ '>':_ -> do discard 1+ popExtContextL "lexTagCtxt: Standard tag"+ pushExtContextL ChildCtxt+ return XStdTagClose+ _ -> lexStdToken++lexHarpToken :: Lex a Token+lexHarpToken = do+ s <- getInput+ case s of+ '[':'/':_ -> do discard 2+ pushExtContextL HarpCtxt+ return RPOpen+ '/':']':_ -> do discard 2+ popExtContextL "lexHarpToken"+ return RPClose+ '(':'/':_ -> do discard 2+ return RPSeqOpen+ '/':')':_ -> do discard 2+ return RPSeqClose+ '*':'!':_ -> do discard 2+ return RPStarG+ '*':_ -> do discard 1+ return RPStar+ '+':'!':_ -> do discard 2+ return RPPlusG+ '+':_ -> do discard 1+ return RPPlus+ '|':_ -> do discard 1+ return RPEither+ '?':'!':_ -> do discard 2+ return RPOptG+ '?':_ -> do discard 1+ return RPOpt+ '@':':':_ -> do discard 2+ return RPCAt+ _ -> lexStdToken++lexStdToken :: Lex a Token+lexStdToken = do+ s <- getInput+ case s of+ [] -> return EOF++ '0':c:d:_ | toLower c == 'o' && isOctDigit d -> do+ discard 2+ n <- lexOctal+ return (IntTok n)+ | toLower c == 'x' && isHexDigit d -> do+ discard 2+ n <- lexHexadecimal+ return (IntTok n)+ + -- implicit parameters+ '?':c:_ | isLower c -> do+ discard 1+ id <- lexWhile isIdent+ return $ IDupVarId id++ '%':c:_ | isLower c -> do+ discard 1+ id <- lexWhile isIdent+ return $ ILinVarId id+ -- end implicit parameters++ -- harp+ '[':'/':_ -> do+ discard 2+ pushExtContextL HarpCtxt+ return RPOpen + + -- template haskell+ '[':'|':_ -> do+ discard 2+ return $ THExpQuote+ + '[':c:'|':_ | c == 'e' -> do+ discard 3+ return $ THExpQuote+ | c == 'p' -> do+ discard 3+ return THPatQuote+ | c == 'd' -> do+ discard 3+ return THDecQuote+ | c == 't' -> do+ discard 3+ return THTypQuote+ + '|':']':_ -> do discard 2+ return THCloseQuote+ + '$':c:_ | isLower c -> do+ discard 1+ id <- lexWhile isIdent+ return $ THIdEscape id+ | c == '(' -> do+ discard 2+ return THParenEscape+ -- end template haskell+ + -- hsx+ '<':'%':_ -> do discard 2+ pushExtContextL CodeTagCtxt+ return XCodeTagOpen+ '<':c:_ | isAlpha c -> do discard 1+ pushExtContextL TagCtxt+ return XStdTagOpen+ -- end hsx+ + '(':'#':_ -> do discard 2 >> return LeftHashParen+ + '#':')':_ -> do discard 2 >> return RightHashParen+ + c:_ | isDigit c -> lexDecimalOrFloat++ | isUpper c -> lexConIdOrQual ""++ | isLower c || c == '_' -> do+ idents <- lexIdents+ case idents of+ [ident] -> return $ case lookup ident (reserved_ids ++ special_varids) of+ Just keyword -> keyword+ Nothing -> VarId ident+ _ -> return $ DVarId idents++ | isHSymbol c -> do+ sym <- lexWhile isHSymbol+ return $ case lookup sym (reserved_ops ++ special_varops) of+ Just t -> t+ Nothing -> case c of+ ':' -> ConSym sym+ _ -> VarSym sym++ | otherwise -> do+ discard 1+ case c of++ -- First the special symbols+ '(' -> return LeftParen+ ')' -> return RightParen+ ',' -> return Comma+ ';' -> return SemiColon+ '[' -> return LeftSquare+ ']' -> return RightSquare+ '`' -> return BackQuote+ '{' -> do+ pushContextL NoLayout+ return LeftCurly+ '}' -> do+ popContextL "lexStdToken"+ return RightCurly++ '\'' -> do+ c2 <- lexChar+ matchChar '\'' "Improperly terminated character constant"+ return (Character c2)++ '"' -> lexString++ _ -> fail ("Illegal character \'" ++ show c ++ "\'\n")++ where lexIdents :: Lex a [String]+ lexIdents = do+ ident <- lexWhile isIdent+ s <- getInput+ case s of+ '-':c:_ | isIdent c -> do + discard 1+ idents <- lexIdents+ return $ ident : idents+ _ -> return [ident]++++lexDecimalOrFloat :: Lex a Token+lexDecimalOrFloat = do+ ds <- lexWhile isDigit+ rest <- getInput+ case rest of+ ('.':d:_) | isDigit d -> do+ discard 1+ frac <- lexWhile isDigit+ let num = parseInteger 10 (ds ++ frac)+ decimals = toInteger (length frac)+ exponent <- do+ rest2 <- getInput+ case rest2 of+ 'e':_ -> lexExponent+ 'E':_ -> lexExponent+ _ -> return 0+ return (FloatTok ((num%1) * 10^^(exponent - decimals)))+ e:_ | toLower e == 'e' -> do+ exponent <- lexExponent+ return (FloatTok ((parseInteger 10 ds%1) * 10^^exponent))+ _ -> return (IntTok (parseInteger 10 ds))++ where+ lexExponent :: Lex a Integer+ lexExponent = do+ discard 1 -- 'e' or 'E'+ r <- getInput+ case r of+ '+':d:_ | isDigit d -> do+ discard 1+ lexDecimal+ '-':d:_ | isDigit d -> do+ discard 1+ n <- lexDecimal+ return (negate n)+ d:_ | isDigit d -> lexDecimal+ _ -> fail "Float with missing exponent"++lexConIdOrQual :: String -> Lex a Token+lexConIdOrQual qual = do+ con <- lexWhile isIdent+ let conid | null qual = ConId con+ | otherwise = QConId (qual,con)+ qual' | null qual = con+ | otherwise = qual ++ '.':con+ just_a_conid <- alternative (return conid)+ rest <- getInput+ case rest of+ '.':c:_+ | isLower c || c == '_' -> do -- qualified varid?+ discard 1+ ident <- lexWhile isIdent+ case lookup ident reserved_ids of+ -- cannot qualify a reserved word+ Just _ -> just_a_conid+ Nothing -> return (QVarId (qual', ident))++ | isUpper c -> do -- qualified conid?+ discard 1+ lexConIdOrQual qual'++ | isHSymbol c -> do -- qualified symbol?+ discard 1+ sym <- lexWhile isHSymbol+ case lookup sym reserved_ops of+ -- cannot qualify a reserved operator+ Just _ -> just_a_conid+ Nothing -> return $ case c of+ ':' -> QConSym (qual', sym)+ _ -> QVarSym (qual', sym)++ _ -> return conid -- not a qualified thing++lexChar :: Lex a Char+lexChar = do+ r <- getInput+ case r of+ '\\':_ -> lexEscape+ c:_ -> discard 1 >> return c+ [] -> fail "Incomplete character constant"++lexString :: Lex a Token+lexString = loop ""+ where+ loop s = do+ r <- getInput+ case r of+ '\\':'&':_ -> do+ discard 2+ loop s+ '\\':c:_ | isSpace c -> do+ discard 1+ lexWhiteChars+ matchChar '\\' "Illegal character in string gap"+ loop s+ | otherwise -> do+ ce <- lexEscape+ loop (ce:s)+ '"':_ -> do+ discard 1+ return (StringTok (reverse s))+ c:_ -> do+ discard 1+ loop (c:s)+ [] -> fail "Improperly terminated string"++ lexWhiteChars :: Lex a ()+ lexWhiteChars = do+ s <- getInput+ case s of+ '\n':_ -> do+ lexNewline+ lexWhiteChars+ '\t':_ -> do+ lexTab+ lexWhiteChars+ c:_ | isSpace c -> do+ discard 1+ lexWhiteChars+ _ -> return ()++lexEscape :: Lex a Char+lexEscape = do+ discard 1+ r <- getInput+ case r of++-- Production charesc from section B.2 (Note: \& is handled by caller)++ 'a':_ -> discard 1 >> return '\a'+ 'b':_ -> discard 1 >> return '\b'+ 'f':_ -> discard 1 >> return '\f'+ 'n':_ -> discard 1 >> return '\n'+ 'r':_ -> discard 1 >> return '\r'+ 't':_ -> discard 1 >> return '\t'+ 'v':_ -> discard 1 >> return '\v'+ '\\':_ -> discard 1 >> return '\\'+ '"':_ -> discard 1 >> return '\"'+ '\'':_ -> discard 1 >> return '\''++-- Production ascii from section B.2++ '^':c:_ -> discard 2 >> cntrl c+ 'N':'U':'L':_ -> discard 3 >> return '\NUL'+ 'S':'O':'H':_ -> discard 3 >> return '\SOH'+ 'S':'T':'X':_ -> discard 3 >> return '\STX'+ 'E':'T':'X':_ -> discard 3 >> return '\ETX'+ 'E':'O':'T':_ -> discard 3 >> return '\EOT'+ 'E':'N':'Q':_ -> discard 3 >> return '\ENQ'+ 'A':'C':'K':_ -> discard 3 >> return '\ACK'+ 'B':'E':'L':_ -> discard 3 >> return '\BEL'+ 'B':'S':_ -> discard 2 >> return '\BS'+ 'H':'T':_ -> discard 2 >> return '\HT'+ 'L':'F':_ -> discard 2 >> return '\LF'+ 'V':'T':_ -> discard 2 >> return '\VT'+ 'F':'F':_ -> discard 2 >> return '\FF'+ 'C':'R':_ -> discard 2 >> return '\CR'+ 'S':'O':_ -> discard 2 >> return '\SO'+ 'S':'I':_ -> discard 2 >> return '\SI'+ 'D':'L':'E':_ -> discard 3 >> return '\DLE'+ 'D':'C':'1':_ -> discard 3 >> return '\DC1'+ 'D':'C':'2':_ -> discard 3 >> return '\DC2'+ 'D':'C':'3':_ -> discard 3 >> return '\DC3'+ 'D':'C':'4':_ -> discard 3 >> return '\DC4'+ 'N':'A':'K':_ -> discard 3 >> return '\NAK'+ 'S':'Y':'N':_ -> discard 3 >> return '\SYN'+ 'E':'T':'B':_ -> discard 3 >> return '\ETB'+ 'C':'A':'N':_ -> discard 3 >> return '\CAN'+ 'E':'M':_ -> discard 2 >> return '\EM'+ 'S':'U':'B':_ -> discard 3 >> return '\SUB'+ 'E':'S':'C':_ -> discard 3 >> return '\ESC'+ 'F':'S':_ -> discard 2 >> return '\FS'+ 'G':'S':_ -> discard 2 >> return '\GS'+ 'R':'S':_ -> discard 2 >> return '\RS'+ 'U':'S':_ -> discard 2 >> return '\US'+ 'S':'P':_ -> discard 2 >> return '\SP'+ 'D':'E':'L':_ -> discard 3 >> return '\DEL'++-- Escaped numbers++ 'o':c:_ | isOctDigit c -> do+ discard 1+ n <- lexOctal+ checkChar n+ 'x':c:_ | isHexDigit c -> do+ discard 1+ n <- lexHexadecimal+ checkChar n+ c:_ | isDigit c -> do+ n <- lexDecimal+ checkChar n++ _ -> fail "Illegal escape sequence"++ where+ checkChar n | n <= 0x01FFFF = return (chr (fromInteger n))+ checkChar _ = fail "Character constant out of range"++-- Production cntrl from section B.2++ cntrl :: Char -> Lex a Char+ cntrl c | c >= '@' && c <= '_' = return (chr (ord c - ord '@'))+ cntrl _ = fail "Illegal control character"++-- assumes at least one octal digit+lexOctal :: Lex a Integer+lexOctal = do+ ds <- lexWhile isOctDigit+ return (parseInteger 8 ds)++-- assumes at least one hexadecimal digit+lexHexadecimal :: Lex a Integer+lexHexadecimal = do+ ds <- lexWhile isHexDigit+ return (parseInteger 16 ds)++-- assumes at least one decimal digit+lexDecimal :: Lex a Integer+lexDecimal = do+ ds <- lexWhile isDigit+ return (parseInteger 10 ds)++-- Stolen from Hugs's Prelude+parseInteger :: Integer -> String -> Integer+parseInteger radix ds =+ foldl1 (\n d -> n * radix + d) (map (toInteger . digitToInt) ds)
+ Language/Haskell/Exts/ParseMonad.hs view
@@ -0,0 +1,292 @@+-- #hide+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.ParseMonad+-- Original : Language.Haskell.ParseMonad+-- Copyright : (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file libraries/base/LICENSE)+-- +-- Maintainer : libraries@haskell.org+-- Stability : experimental+-- Portability : portable+--+-- Monads for the Haskell parser and lexer.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.ParseMonad(+ -- * Parsing+ P, ParseResult(..), atSrcLoc, LexContext(..),+ ParseMode(..), defaultParseMode,+ runParserWithMode, runParser,+ getSrcLoc, pushCurrentContext, popContext,+ -- * Lexing+ Lex(runL), getInput, discard, lexNewline, lexTab, lexWhile,+ alternative, checkBOL, setBOL, startToken, getOffside,+ pushContextL, popContextL,+ -- * Harp/Hsx+ ExtContext(..),+ pushExtContextL, popExtContextL, getExtContext,+ getModuleName+ ) where++import Language.Haskell.Exts.Syntax(SrcLoc(..))++import Data.List ( intersperse )++-- | The result of a parse.+data ParseResult a+ = ParseOk a -- ^ The parse succeeded, yielding a value.+ | ParseFailed SrcLoc String+ -- ^ The parse failed at the specified+ -- source location, with an error message.+ deriving Show++-- internal version+data ParseStatus a = Ok ParseState a | Failed SrcLoc String+ deriving Show++data LexContext = NoLayout | Layout Int+ deriving (Eq,Ord,Show)+ +data ExtContext = CodeCtxt | HarpCtxt | TagCtxt | ChildCtxt + | CloseTagCtxt | CodeTagCtxt+ deriving (Eq,Ord,Show)++type ParseState = ([LexContext],[ExtContext])++indentOfParseState :: ParseState -> Int+indentOfParseState (Layout n:_,_) = n+indentOfParseState _ = 0++-- | Static parameters governing a parse.+-- More to come later, e.g. literate mode, language extensions.++data ParseMode = ParseMode {+ -- | original name of the file being parsed+ parseFilename :: String+ }++-- | Default parameters for a parse,+-- currently just a marker for an unknown filename.++defaultParseMode :: ParseMode+defaultParseMode = ParseMode {+ parseFilename = "<unknown>.hs"+ }++-- | Monad for parsing++newtype P a = P { runP ::+ String -- input string+ -> Int -- current column+ -> Int -- current line+ -> SrcLoc -- location of last token read+ -> ParseState -- layout info.+ -> ParseMode -- parse parameters+ -> ParseStatus a+ }++runParserWithMode :: ParseMode -> P a -> String -> ParseResult a+runParserWithMode mode (P m) s = case m s 0 1 start ([],[]) mode of+ Ok _ a -> ParseOk a+ Failed loc msg -> ParseFailed loc msg+ where start = SrcLoc {+ srcFilename = parseFilename mode,+ srcLine = 1,+ srcColumn = 1+ }++runParser :: P a -> String -> ParseResult a+runParser = runParserWithMode defaultParseMode++instance Monad P where+ return a = P $ \_i _x _y _l s _m -> Ok s a+ P m >>= k = P $ \i x y l s mode ->+ case m i x y l s mode of+ Failed loc msg -> Failed loc msg+ Ok s' a -> runP (k a) i x y l s' mode+ fail s = P $ \_r _col _line loc _stk _m -> Failed loc s++atSrcLoc :: P a -> SrcLoc -> P a+P m `atSrcLoc` loc = P $ \i x y _l -> m i x y loc++getSrcLoc :: P SrcLoc+getSrcLoc = P $ \_i _x _y l s _m -> Ok s l++getModuleName :: P String+getModuleName = P $ \_i _x _y _l s m -> + let fn = parseFilename m+ mn = concat $ intersperse "." $ splitPath fn+ + splitPath :: String -> [String]+ splitPath "" = []+ splitPath str = let (l,str') = break ('\\'==) str+ in case str' of + [] -> [removeSuffix l]+ (_:str'') -> l : splitPath str''+ + removeSuffix l = reverse $ tail $ dropWhile ('.'/=) $ reverse l++ in Ok s mn++-- Enter a new layout context. If we are already in a layout context,+-- ensure that the new indent is greater than the indent of that context.+-- (So if the source loc is not to the right of the current indent, an+-- empty list {} will be inserted.)++pushCurrentContext :: P ()+pushCurrentContext = do+ loc <- getSrcLoc+ indent <- currentIndent+ pushContext (Layout (srcColumn loc))++currentIndent :: P Int+currentIndent = P $ \_r _x _y loc stk _mode -> Ok stk (indentOfParseState stk)++pushContext :: LexContext -> P ()+pushContext ctxt =+--trace ("pushing lexical scope: " ++ show ctxt ++"\n") $+ P $ \_i _x _y _l (s, e) _m -> Ok (ctxt:s, e) ()++popContext :: P ()+popContext = P $ \_i _x _y _l stk _m ->+ case stk of+ (_:s, e) -> --trace ("popping lexical scope, context now "++show s ++ "\n") $+ Ok (s, e) ()+ ([],_) -> error "Internal error: empty context in popContext"+++-- HaRP/Hsx+pushExtContext :: ExtContext -> P ()+pushExtContext ctxt = P $ \_i _x _y _l (s, e) _m -> Ok (s, ctxt:e) ()++popExtContext :: P ()+popExtContext = P $ \_i _x _y _l (s, e) _m ->+ case e of+ (_:e') -> + Ok (s, e') ()+ [] -> error "Internal error: empty context in popExtContext"+++-- Monad for lexical analysis:+-- a continuation-passing version of the parsing monad++newtype Lex r a = Lex { runL :: (a -> P r) -> P r }++instance Monad (Lex r) where+ return a = Lex $ \k -> k a+ Lex v >>= f = Lex $ \k -> v (\a -> runL (f a) k)+ Lex v >> Lex w = Lex $ \k -> v (\_ -> w k)+ fail s = Lex $ \_ -> fail s++-- Operations on this monad++getInput :: Lex r String+getInput = Lex $ \cont -> P $ \r -> runP (cont r) r++-- | Discard some input characters (these must not include tabs or newlines).++discard :: Int -> Lex r ()+discard n = Lex $ \cont -> P $ \r x -> runP (cont ()) (drop n r) (x+n)++-- | Discard the next character, which must be a newline.++lexNewline :: Lex a ()+lexNewline = Lex $ \cont -> P $ \(_:r) _x y -> runP (cont ()) r 1 (y+1)++-- | Discard the next character, which must be a tab.++lexTab :: Lex a ()+lexTab = Lex $ \cont -> P $ \(_:r) x -> runP (cont ()) r (nextTab x)++nextTab :: Int -> Int+nextTab x = x + (tAB_LENGTH - (x-1) `mod` tAB_LENGTH)++tAB_LENGTH :: Int+tAB_LENGTH = 8 :: Int++-- Consume and return the largest string of characters satisfying p++lexWhile :: (Char -> Bool) -> Lex a String+lexWhile p = Lex $ \cont -> P $ \r x ->+ let (cs,rest) = span p r in+ runP (cont cs) rest (x + length cs)++-- An alternative scan, to which we can return if subsequent scanning+-- is unsuccessful.++alternative :: Lex a v -> Lex a (Lex a v)+alternative (Lex v) = Lex $ \cont -> P $ \r x y ->+ runP (cont (Lex $ \cont' -> P $ \_r _x _y ->+ runP (v cont') r x y)) r x y++-- The source location is the coordinates of the previous token,+-- or, while scanning a token, the start of the current token.++-- col is the current column in the source file.+-- We also need to remember between scanning tokens whether we are+-- somewhere at the beginning of the line before the first token.+-- This could be done with an extra Bool argument to the P monad,+-- but as a hack we use a col value of 0 to indicate this situation.++-- Setting col to 0 is used in two places: just after emitting a virtual+-- close brace due to layout, so that next time through we check whether+-- we also need to emit a semi-colon, and at the beginning of the file,+-- by runParser, to kick off the lexer.+-- Thus when col is zero, the true column can be taken from the loc.++checkBOL :: Lex a Bool+checkBOL = Lex $ \cont -> P $ \r x y loc ->+ if x == 0 then runP (cont True) r (srcColumn loc) y loc+ else runP (cont False) r x y loc++setBOL :: Lex a ()+setBOL = Lex $ \cont -> P $ \r _ -> runP (cont ()) r 0++-- Set the loc to the current position++startToken :: Lex a ()+startToken = Lex $ \cont -> P $ \s x y _ stk mode ->+ let loc = SrcLoc {+ srcFilename = parseFilename mode,+ srcLine = y,+ srcColumn = x+ } in+ runP (cont ()) s x y loc stk mode++-- Current status with respect to the offside (layout) rule:+-- LT: we are to the left of the current indent (if any)+-- EQ: we are at the current indent (if any)+-- GT: we are to the right of the current indent, or not subject to layout++getOffside :: Lex a Ordering+getOffside = Lex $ \cont -> P $ \r x y loc stk ->+ runP (cont (compare x (indentOfParseState stk))) r x y loc stk++pushContextL :: LexContext -> Lex a ()+pushContextL ctxt = Lex $ \cont -> P $ \r x y loc (stk, e) ->+ runP (cont ()) r x y loc (ctxt:stk, e)++popContextL :: String -> Lex a ()+popContextL fn = Lex $ \cont -> P $ \r x y loc stk -> case stk of+ (_:ctxt, e) -> runP (cont ()) r x y loc (ctxt, e)+ ([], _) -> error ("Internal error: empty context in " ++ fn)++-- Harp/Hsx++getExtContext :: Lex a (Maybe ExtContext)+getExtContext = Lex $ \cont -> P $ \r x y loc stk@(_, e) ->+ let me = case e of+ [] -> Nothing+ (c:_) -> Just c+ in runP (cont me) r x y loc stk++pushExtContextL :: ExtContext -> Lex a ()+pushExtContextL ec = Lex $ \cont -> P $ \r x y loc (s, e) ->+ runP (cont ()) r x y loc (s, ec:e)++popExtContextL :: String -> Lex a ()+popExtContextL fn = Lex $ \cont -> P $ \r x y loc stk@(s,e) -> case e of+ (_:ec) -> runP (cont ()) r x y loc (s,ec)+ [] -> error ("Internal error: empty tag context in " ++ fn)
+ Language/Haskell/Exts/ParseUtils.hs view
@@ -0,0 +1,601 @@+-- #hide+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.ParseUtils+-- Original : Language.Haskell.ParseUtils+-- Copyright : (c) Niklas Broberg 2004,+-- (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+-- +-- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se+-- Stability : experimental+-- Portability : portable+--+-- Utilities for the Haskell-exts parser.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.ParseUtils (+ splitTyConApp -- HsType -> P (HsName,[HsType])+ , mkRecConstrOrUpdate -- HsExp -> [HsFieldUpdate] -> P HsExp+ , checkPrec -- Integer -> P Int+ , checkContext -- HsType -> P HsContext+ , checkAssertion -- HsType -> P HsAsst+ , checkDataHeader -- HsType -> P (HsContext,HsName,[HsName])+ , checkClassHeader -- HsType -> P (HsContext,HsName,[HsName])+ , checkInstHeader -- HsType -> P (HsContext,HsQName,[HsType])+ , checkPattern -- HsExp -> P HsPat+ , checkExpr -- HsExp -> P HsExp+ , checkValDef -- SrcLoc -> HsExp -> HsRhs -> [HsDecl] -> P HsDecl+ , checkClassBody -- [HsClassDecl] -> P [HsClassDecl]+ , checkInstBody -- [HsInstDecl] -> P [HsInstDecl]+ , checkUnQual -- HsQName -> P HsName+ , checkRevDecls -- [HsDecl] -> P [HsDecl]+ , checkRevClsDecls -- [HsClassDecl] -> P [HsClassDecl]+ , checkRevInstDecls -- [HsInstDecl] -> P [HsInstDecl]+ , checkDataOrNew -- DataOrNew -> [HsDecl] -> P ()+ , checkSimpleType -- HsType -> P ()+ , getGConName -- HsExp -> P HsQName+ , mkHsTyForall -- Maybe [HsName] -> HsContext -> HsType -> HsType + -- HaRP+ , checkRPattern -- HsExp -> P HsRPat+ -- Hsx+ , checkEqNames -- HsXName -> HsXName -> P HsXName+ , mkPageModule -- HsExp -> P HsModule+ , mkPage -- HsModule -> SrcLoc -> HsExp -> P HsModule+ , mkDVar -- [String] -> String+ , mkDVarExpr -- [String] -> HsExp+ ) where++import Language.Haskell.Exts.Syntax+import Language.Haskell.Exts.ParseMonad+import Language.Haskell.Exts.Pretty+import Language.Haskell.Exts.Build++import Data.List (intersperse)++splitTyConApp :: HsType -> P (HsName,[HsType])+splitTyConApp t0 = split t0 []+ where+ split :: HsType -> [HsType] -> P (HsName,[HsType])+ split (HsTyApp t u) ts = split t (u:ts)+ split (HsTyCon (UnQual t)) ts = return (t,ts)+ split (HsTyInfix a op b) ts = split (HsTyCon op) (a:b:ts)+ split _ _ = fail "Illegal data/newtype declaration"++-----------------------------------------------------------------------------+-- Various Syntactic Checks++checkContext :: HsType -> P HsContext+checkContext (HsTyTuple Boxed ts) =+ mapM checkAssertion ts+checkContext t = do+ c <- checkAssertion t+ return [c]++-- Changed for multi-parameter type classes.+-- Further changed for implicit parameters.++checkAssertion :: HsType -> P HsAsst+checkAssertion (HsTyPred p@(HsIParam n t)) = return p+checkAssertion t = checkAssertion' [] t+ where checkAssertion' ts (HsTyCon c) = return $ HsClassA c ts+ checkAssertion' ts (HsTyApp a t) = checkAssertion' (t:ts) a+ checkAssertion' ts (HsTyInfix a op b) = checkAssertion' (a:b:ts) (HsTyCon op)+ checkAssertion' _ _ = fail "Illegal class assertion"+++checkDataHeader :: HsType -> P (HsContext,HsName,[HsName])+checkDataHeader (HsTyForall Nothing cs t) = do+ (c,ts) <- checkSimple "data/newtype" t []+ return (cs,c,ts)+checkDataHeader t = do+ (c,ts) <- checkSimple "data/newtype" t []+ return ([],c,ts)++checkClassHeader :: HsType -> P (HsContext,HsName,[HsName])+checkClassHeader (HsTyForall Nothing cs t) = do+ (c,ts) <- checkSimple "class" t []+ return (cs,c,ts)+checkClassHeader t = do+ (c,ts) <- checkSimple "class" t []+ return ([],c,ts)++checkSimple :: String -> HsType -> [HsName] -> P (HsName,[HsName])+checkSimple kw (HsTyApp l (HsTyVar a)) xs = checkSimple kw l (a:xs)+checkSimple _ (HsTyInfix (HsTyVar a) (UnQual t) (HsTyVar b)) xs = return (t,a:b:xs)+checkSimple _kw (HsTyCon (UnQual t)) xs = return (t,xs)+checkSimple kw _ _ = fail ("Illegal " ++ kw ++ " declaration")++checkInstHeader :: HsType -> P (HsContext,HsQName,[HsType])+checkInstHeader (HsTyForall Nothing cs t) = do+ (c,ts) <- checkInsts t []+ return (cs,c,ts)+checkInstHeader t = do+ (c,ts) <- checkInsts t []+ return ([],c,ts)+ ++checkInsts :: HsType -> [HsType] -> P ((HsQName,[HsType]))+checkInsts (HsTyApp l t) ts = checkInsts l (t:ts)+checkInsts (HsTyCon c) ts = return (c,ts)+checkInsts _ _ = fail "Illegal instance declaration"++{-+checkInst :: HsType -> P ()+checkInst (HsTyApp l _) = checkInst l+checkInst (HsTyVar _) = fail "Illegal instance declaration"+checkInst _ = return ()+-}++-----------------------------------------------------------------------------+-- Checking Patterns.++-- We parse patterns as expressions and check for valid patterns below,+-- converting the expression into a pattern at the same time.++checkPattern :: HsExp -> P HsPat+checkPattern e = checkPat e []++checkPat :: HsExp -> [HsPat] -> P HsPat+checkPat (HsCon c) args = return (HsPApp c args)+checkPat (HsApp f x) args = do+ x <- checkPat x []+ checkPat f (x:args)+checkPat e [] = case e of+ HsVar (UnQual x) -> return (HsPVar x)+ HsLit l -> return (HsPLit l)+ HsInfixApp l op r -> do+ l <- checkPat l []+ r <- checkPat r []+ case op of+ HsQConOp c -> return (HsPInfixApp l c r)+ _ -> patFail ""+ HsTuple es -> do+ ps <- mapM (\e -> checkPat e []) es+ return (HsPTuple ps)+ HsList es -> do+ ps <- mapM (\e -> checkPat e []) es+ return (HsPList ps)+ HsParen e -> do+ p <- checkPat e []+ return (HsPParen p)+ HsAsPat n e -> do+ p <- checkPat e []+ return (HsPAsPat n p)+ HsWildCard -> return HsPWildCard+ HsIrrPat e -> do+ p <- checkPat e []+ return (HsPIrrPat p)+ HsRecConstr c fs -> do+ fs <- mapM checkPatField fs+ return (HsPRec c fs)+ HsNegApp (HsLit l) -> return (HsPNeg (HsPLit l))+ HsRPats s es -> do+ rps <- mapM checkRPattern es+ return (HsPRPat s rps)+ HsExpTypeSig s e t -> do+ p <- checkPat e []+ return (HsPatTypeSig s p t)+ + -- Hsx+ HsXTag s n attrs mattr cs -> do+ pattrs <- mapM checkPAttr attrs+ pcs <- mapM (\c -> checkPat c []) cs+ mpattr <- maybe (return Nothing) + (\e -> do p <- checkPat e []+ return $ Just p) + mattr+ let cp = mkChildrenPat pcs+ return $ HsPXTag s n pattrs mpattr cp+ HsXETag s n attrs mattr -> do+ pattrs <- mapM checkPAttr attrs+ mpattr <- maybe (return Nothing) + (\e -> do p <- checkPat e []+ return $ Just p) + mattr+ return $ HsPXETag s n pattrs mpattr+ HsXPcdata pcdata -> return $ HsPXPcdata pcdata+ HsXExpTag e -> do+ p <- checkPat e []+ return $ HsPXPatTag p+ e -> patFail $ show e++checkPat e _ = patFail $ show e++checkPatField :: HsFieldUpdate -> P HsPatField+checkPatField (HsFieldUpdate n e) = do+ p <- checkPat e []+ return (HsPFieldPat n p)++checkPAttr :: HsXAttr -> P HsPXAttr+checkPAttr (HsXAttr n v) = do p <- checkPat v []+ return $ HsPXAttr n p++patFail :: String -> P a+patFail s = fail $ "Parse error in pattern: " ++ s++checkRPattern :: HsExp -> P HsRPat+checkRPattern e = case e of+ HsSeqRP es -> do + rps <- mapM checkRPattern es+ return $ HsRPSeq rps+ HsStarRP e -> do+ rp <- checkRPattern e+ return $ HsRPStar rp+ HsPlusRP e -> do+ rp <- checkRPattern e+ return $ HsRPPlus rp + HsOptRP e -> do+ rp <- checkRPattern e+ return $ HsRPOpt rp + HsStarGRP e -> do+ rp <- checkRPattern e+ return $ HsRPStarG rp+ HsPlusGRP e -> do+ rp <- checkRPattern e+ return $ HsRPPlusG rp + HsOptGRP e -> do+ rp <- checkRPattern e+ return $ HsRPOptG rp + HsEitherRP e1 e2 -> do+ rp1 <- checkRPattern e1+ rp2 <- checkRPattern e2+ return $ HsRPEither rp1 rp2+ HsCAsRP n e -> do+ rp <- checkRPattern e+ return $ HsRPCAs n rp+ HsAsPat n e -> do+ rp <- checkRPattern e+ return $ HsRPAs n rp+ HsParen e -> do+ rp <- checkRPattern e+ return $ HsRPParen rp+ _ -> do+ p <- checkPattern e+ return $ HsRPPat p+++mkChildrenPat :: [HsPat] -> HsPat+mkChildrenPat ps = mkCPAux ps []+ where mkCPAux :: [HsPat] -> [HsPat] -> HsPat+ mkCPAux [] qs = HsPList $ reverse qs+ mkCPAux (p:ps) qs = case p of+ (HsPRPat s rps) -> mkCRP s ps (reverse rps ++ map HsRPPat qs)+ _ -> mkCPAux ps (p:qs)+ + mkCRP :: SrcLoc -> [HsPat] -> [HsRPat] -> HsPat+ mkCRP s [] rps = HsPRPat s $ reverse rps+ mkCRP s (p:ps) rps = case p of+ (HsPRPat _ rqs) -> mkCRP s ps (reverse rqs ++ rps)+ _ -> mkCRP s ps (HsRPPat p : rps)++-----------------------------------------------------------------------------+-- Check Expression Syntax++checkExpr :: HsExp -> P HsExp+checkExpr e = case e of+ HsVar _ -> return e+ HsIPVar _ -> return e+ HsCon _ -> return e+ HsLit _ -> return e+ HsInfixApp e1 op e2 -> check2Exprs e1 e2 (flip HsInfixApp op)+ HsApp e1 e2 -> check2Exprs e1 e2 HsApp+ HsNegApp e -> check1Expr e HsNegApp+ HsLambda loc ps e -> check1Expr e (HsLambda loc ps)+ HsLet bs e -> check1Expr e (HsLet bs)+ HsDLet bs e -> check1Expr e (HsDLet bs)+ HsWith e bs -> check1Expr e (flip HsWith bs)+ HsIf e1 e2 e3 -> check3Exprs e1 e2 e3 HsIf+ HsCase e alts -> do+ alts <- mapM checkAlt alts+ e <- checkExpr e+ return (HsCase e alts)+ HsDo stmts -> do+ stmts <- mapM checkStmt stmts+ return (HsDo stmts)+ HsMDo stmts -> do+ stmts <- mapM checkStmt stmts+ return (HsMDo stmts)+ HsTuple es -> checkManyExprs es HsTuple+ HsList es -> checkManyExprs es HsList+ HsParen e -> check1Expr e HsParen+ HsLeftSection e op -> check1Expr e (flip HsLeftSection op)+ HsRightSection op e -> check1Expr e (HsRightSection op)+ HsRecConstr c fields -> do+ fields <- mapM checkField fields+ return (HsRecConstr c fields)+ HsRecUpdate e fields -> do+ fields <- mapM checkField fields+ e <- checkExpr e+ return (HsRecUpdate e fields)+ HsEnumFrom e -> check1Expr e HsEnumFrom+ HsEnumFromTo e1 e2 -> check2Exprs e1 e2 HsEnumFromTo+ HsEnumFromThen e1 e2 -> check2Exprs e1 e2 HsEnumFromThen+ HsEnumFromThenTo e1 e2 e3 -> check3Exprs e1 e2 e3 HsEnumFromThenTo+ HsListComp e stmts -> do+ stmts <- mapM checkStmt stmts+ e <- checkExpr e+ return (HsListComp e stmts)+ HsExpTypeSig loc e ty -> do+ e <- checkExpr e+ return (HsExpTypeSig loc e ty)+ + --Template Haskell+ HsReifyExp _ -> return e+ HsBracketExp _ -> return e+ HsSpliceExp _ -> return e+ + -- Hsx+ HsXTag s n attrs mattr cs -> do attrs <- mapM checkAttr attrs+ cs <- mapM checkExpr cs+ mattr <- maybe (return Nothing) + (\e -> checkExpr e >>= return . Just) + mattr + return $ HsXTag s n attrs mattr cs+ HsXETag s n attrs mattr -> do attrs <- mapM checkAttr attrs+ mattr <- maybe (return Nothing) + (\e -> checkExpr e >>= return . Just) + mattr + return $ HsXETag s n attrs mattr + HsXPcdata _ -> return e+ HsXExpTag e -> do e <- checkExpr e+ return $ HsXExpTag e+ _ -> fail $ "Parse error in expression: " ++ show e++checkAttr :: HsXAttr -> P HsXAttr+checkAttr (HsXAttr n v) = do v <- checkExpr v+ return $ HsXAttr n v++-- type signature for polymorphic recursion!!+check1Expr :: HsExp -> (HsExp -> a) -> P a+check1Expr e1 f = do+ e1 <- checkExpr e1+ return (f e1)++check2Exprs :: HsExp -> HsExp -> (HsExp -> HsExp -> a) -> P a+check2Exprs e1 e2 f = do+ e1 <- checkExpr e1+ e2 <- checkExpr e2+ return (f e1 e2)++check3Exprs :: HsExp -> HsExp -> HsExp -> (HsExp -> HsExp -> HsExp -> a) -> P a+check3Exprs e1 e2 e3 f = do+ e1 <- checkExpr e1+ e2 <- checkExpr e2+ e3 <- checkExpr e3+ return (f e1 e2 e3)++checkManyExprs :: [HsExp] -> ([HsExp] -> a) -> P a+checkManyExprs es f = do+ es <- mapM checkExpr es+ return (f es)++checkAlt :: HsAlt -> P HsAlt+checkAlt (HsAlt loc p galts bs) = do+ galts <- checkGAlts galts+ return (HsAlt loc p galts bs)++checkGAlts :: HsGuardedAlts -> P HsGuardedAlts+checkGAlts (HsUnGuardedAlt e) = check1Expr e HsUnGuardedAlt+checkGAlts (HsGuardedAlts galts) = do+ galts <- mapM checkGAlt galts+ return (HsGuardedAlts galts)++checkGAlt :: HsGuardedAlt -> P HsGuardedAlt+checkGAlt (HsGuardedAlt loc g e) = check1Expr e (HsGuardedAlt loc g)++checkStmt :: HsStmt -> P HsStmt+checkStmt (HsGenerator loc p e) = check1Expr e (HsGenerator loc p)+checkStmt (HsQualifier e) = check1Expr e HsQualifier+checkStmt s@(HsLetStmt _) = return s++checkField :: HsFieldUpdate -> P HsFieldUpdate+checkField (HsFieldUpdate n e) = check1Expr e (HsFieldUpdate n)++getGConName :: HsExp -> P HsQName+getGConName (HsCon n) = return n+getGConName (HsList []) = return list_cons_name+getGConName _ = fail "Expression in reification is not a name"++-----------------------------------------------------------------------------+-- Check Equation Syntax++checkValDef :: SrcLoc -> HsExp -> HsRhs -> HsBinds -> P HsDecl+checkValDef srcloc lhs rhs whereBinds =+ case isFunLhs lhs [] of+ Just (f,es) -> do+ ps <- mapM checkPattern es+ return (HsFunBind [HsMatch srcloc f ps rhs whereBinds])+ Nothing -> do+ lhs <- checkPattern lhs+ return (HsPatBind srcloc lhs rhs whereBinds)++-- A variable binding is parsed as an HsPatBind.++isFunLhs :: HsExp -> [HsExp] -> Maybe (HsName, [HsExp])+isFunLhs (HsInfixApp l (HsQVarOp (UnQual op)) r) es = Just (op, l:r:es)+isFunLhs (HsApp (HsVar (UnQual f)) e) es = Just (f, e:es)+isFunLhs (HsApp (HsParen f) e) es = isFunLhs f (e:es)+isFunLhs (HsApp f e) es = isFunLhs f (e:es)+isFunLhs _ _ = Nothing++-----------------------------------------------------------------------------+-- In a class or instance body, a pattern binding must be of a variable.++checkClassBody :: [HsClassDecl] -> P [HsClassDecl]+checkClassBody decls = do+ mapM_ checkClassMethodDef decls+ return decls+ where checkClassMethodDef (HsClsDecl decl) = checkMethodDef decl+ checkClassMethodDef _ = return ()++checkInstBody :: [HsInstDecl] -> P [HsInstDecl]+checkInstBody decls = do+ mapM_ checkInstMethodDef decls+ return decls+ where checkInstMethodDef (HsInsDecl decl) = checkMethodDef decl+ checkInstMethodDef _ = return ()++checkMethodDef :: HsDecl -> P ()+checkMethodDef (HsPatBind _ (HsPVar _) _ _) = return ()+checkMethodDef (HsPatBind loc _ _ _) =+ fail "illegal method definition" `atSrcLoc` loc+checkMethodDef _ = return ()++-----------------------------------------------------------------------------+-- Check that an identifier or symbol is unqualified.+-- For occasions when doing this in the grammar would cause conflicts.++checkUnQual :: HsQName -> P HsName+checkUnQual (Qual _ _) = fail "Illegal qualified name"+checkUnQual (UnQual n) = return n+checkUnQual (Special _) = fail "Illegal special name"++-----------------------------------------------------------------------------+-- Check that two xml tag names are equal+-- Could use Eq directly, but I am not sure whether <dom:name>...</name> +-- would be valid, in that case Eq won't work. TODO++checkEqNames :: HsXName -> HsXName -> P HsXName+checkEqNames n@(HsXName n1) (HsXName n2) + | n1 == n2 = return n+ | otherwise = fail "names in matching xml tags are not equal"+checkEqNames n@(HsXDomName d1 n1) (HsXDomName d2 n2)+ | n1 == n2 && d1 == d2 = return n+ | otherwise = fail "names in matching xml tags are not equal"+checkEqNames _ _ = fail "names in matching xml tags are not equal"+++-----------------------------------------------------------------------------+-- Miscellaneous utilities++checkPrec :: Integer -> P Int+checkPrec i | 0 <= i && i <= 9 = return (fromInteger i)+checkPrec i | otherwise = fail ("Illegal precedence " ++ show i)++mkRecConstrOrUpdate :: HsExp -> [HsFieldUpdate] -> P HsExp+mkRecConstrOrUpdate (HsCon c) fs = return (HsRecConstr c fs)+mkRecConstrOrUpdate e fs@(_:_) = return (HsRecUpdate e fs)+mkRecConstrOrUpdate _ _ = fail "Empty record update"++-----------------------------------------------------------------------------+-- Reverse a list of declarations, merging adjacent HsFunBinds of the+-- same name and checking that their arities match.++checkRevDecls :: [HsDecl] -> P [HsDecl]+checkRevDecls = mergeFunBinds []+ where+ mergeFunBinds revDs [] = return revDs+ mergeFunBinds revDs (HsFunBind ms1@(HsMatch _ name ps _ _:_):ds1) =+ mergeMatches ms1 ds1+ where+ arity = length ps+ mergeMatches ms' (HsFunBind ms@(HsMatch loc name' ps' _ _:_):ds)+ | name' == name =+ if length ps' /= arity+ then fail ("arity mismatch for '" ++ prettyPrint name ++ "'")+ `atSrcLoc` loc+ else mergeMatches (ms++ms') ds+ mergeMatches ms' ds = mergeFunBinds (HsFunBind ms':revDs) ds+ mergeFunBinds revDs (d:ds) = mergeFunBinds (d:revDs) ds++checkRevClsDecls :: [HsClassDecl] -> P [HsClassDecl]+checkRevClsDecls = mergeClsFunBinds []+ where+ mergeClsFunBinds revDs [] = return revDs+ mergeClsFunBinds revDs (HsClsDecl (HsFunBind ms1@(HsMatch _ name ps _ _:_)):ds1) =+ mergeMatches ms1 ds1+ where+ arity = length ps+ mergeMatches ms' (HsClsDecl (HsFunBind ms@(HsMatch loc name' ps' _ _:_)):ds)+ | name' == name =+ if length ps' /= arity+ then fail ("arity mismatch for '" ++ prettyPrint name ++ "'")+ `atSrcLoc` loc+ else mergeMatches (ms++ms') ds+ mergeMatches ms' ds = mergeClsFunBinds (HsClsDecl (HsFunBind ms'):revDs) ds+ mergeClsFunBinds revDs (d:ds) = mergeClsFunBinds (d:revDs) ds++checkRevInstDecls :: [HsInstDecl] -> P [HsInstDecl]+checkRevInstDecls = mergeInstFunBinds []+ where+ mergeInstFunBinds revDs [] = return revDs+ mergeInstFunBinds revDs (HsInsDecl (HsFunBind ms1@(HsMatch _ name ps _ _:_)):ds1) =+ mergeMatches ms1 ds1+ where+ arity = length ps+ mergeMatches ms' (HsInsDecl (HsFunBind ms@(HsMatch loc name' ps' _ _:_)):ds)+ | name' == name =+ if length ps' /= arity+ then fail ("arity mismatch for '" ++ prettyPrint name ++ "'")+ `atSrcLoc` loc+ else mergeMatches (ms++ms') ds+ mergeMatches ms' ds = mergeInstFunBinds (HsInsDecl (HsFunBind ms'):revDs) ds+ mergeInstFunBinds revDs (d:ds) = mergeInstFunBinds (d:revDs) ds++----------------------------------------------------------------+-- Check that newtype declarations have+-- the right number (1) of constructors++checkDataOrNew :: DataOrNew -> [a] -> P ()+checkDataOrNew NewType [x] = return ()+checkDataOrNew DataType _ = return ()+checkDataOrNew _ _ = fail "newtype declaration must have exactly one constructor."++checkSimpleType :: HsType -> P (HsName, [HsName])+checkSimpleType t = checkSimple "test" t []++---------------------------------------+-- Converting a complete page++pageFun :: SrcLoc -> HsExp -> HsDecl+pageFun loc e = HsPatBind loc namePat rhs (HsBDecls [])+ where namePat = HsPVar $ HsIdent "page"+ rhs = HsUnGuardedRhs e++mkPage :: HsModule -> SrcLoc -> HsExp -> P HsModule+mkPage (HsModule src md exps imps decls) loc xml = do+ let page = pageFun loc xml+ return $ HsModule src md exps imps (decls ++ [page])+ +mkPageModule :: HsExp -> P HsModule+mkPageModule xml = do + do loc <- case xml of + HsXTag l _ _ _ _ -> return l+ HsXETag l _ _ _ -> return l+ _ -> fail "Will not happen since mkPageModule is only called on XML expressions"+ mod <- getModuleName+ return $ (HsModule + loc+ (Module mod)+ (Just [HsEVar $ UnQual $ HsIdent "page"])+ []+ [pageFun loc xml])++---------------------------------------+-- Handle dash-identifiers++mkDVar :: [String] -> String+mkDVar = concat . intersperse "-"++mkDVarExpr :: [String] -> HsExp+mkDVarExpr = foldl1 (\x y -> infixApp x (op $ sym "-") y) . map (var . name)++---------------------------------------+-- Combine adjacent for-alls. +--+-- A valid type must have one for-all at the top of the type, or of the fn arg types++mkHsTyForall :: Maybe [HsTyVarBind] -> HsContext -> HsType -> HsType+mkHsTyForall mtvs [] ty = mk_forall_ty mtvs ty+mkHsTyForall mtvs ctxt ty = HsTyForall mtvs ctxt ty++-- mk_forall_ty makes a pure for-all type (no context)+mk_forall_ty (Just []) ty = ty -- Explicit for-all with no tyvars+mk_forall_ty mtvs1 (HsTyForall mtvs2 ctxt ty) = mkHsTyForall (mtvs1 `plus` mtvs2) ctxt ty+mk_forall_ty mtvs1 ty = HsTyForall mtvs1 [] ty++mtvs1 `plus` Nothing = mtvs1+Nothing `plus` mtvs2 = mtvs2 +(Just tvs1) `plus` (Just tvs2) = Just (tvs1 ++ tvs2)
+ Language/Haskell/Exts/Parser.hs view
@@ -0,0 +1,5885 @@+{-# OPTIONS -fglasgow-exts -cpp #-} +----------------------------------------------------------------------------- +-- | +-- Module : Language.Haskell.Exts.Parser +-- Original : Language.Haskell.Parser +-- Copyright : (c) Niklas Broberg 2004, +-- Original (c) Simon Marlow, Sven Panne 1997-2000 +-- License : BSD-style (see the file LICENSE.txt) +-- +-- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se +-- Stability : experimental +-- Portability : portable +-- +-- +----------------------------------------------------------------------------- +module Language.Haskell.Exts.Parser ( + parseModule, parseModuleWithMode, + ParseMode(..), defaultParseMode, ParseResult(..)) where + +import Language.Haskell.Exts.Syntax +import Language.Haskell.Exts.ParseMonad +import Language.Haskell.Exts.Lexer +import Language.Haskell.Exts.ParseUtils +#if __GLASGOW_HASKELL__ >= 503 +import Data.Array +#else +import Array +#endif +#if __GLASGOW_HASKELL__ >= 503 +import GHC.Exts +#else +import GlaExts +#endif + +-- parser produced by Happy Version 1.17 + +newtype HappyAbsSyn = HappyAbsSyn HappyAny +#if __GLASGOW_HASKELL__ >= 607 +type HappyAny = GHC.Exts.Any +#else +type HappyAny = forall a . a +#endif +happyIn4 :: (HsModule) -> (HappyAbsSyn ) +happyIn4 x = unsafeCoerce# x +{-# INLINE happyIn4 #-} +happyOut4 :: (HappyAbsSyn ) -> (HsModule) +happyOut4 x = unsafeCoerce# x +{-# INLINE happyOut4 #-} +happyIn5 :: (HsExp) -> (HappyAbsSyn ) +happyIn5 x = unsafeCoerce# x +{-# INLINE happyIn5 #-} +happyOut5 :: (HappyAbsSyn ) -> (HsExp) +happyOut5 x = unsafeCoerce# x +{-# INLINE happyOut5 #-} +happyIn6 :: (HsModule) -> (HappyAbsSyn ) +happyIn6 x = unsafeCoerce# x +{-# INLINE happyIn6 #-} +happyOut6 :: (HappyAbsSyn ) -> (HsModule) +happyOut6 x = unsafeCoerce# x +{-# INLINE happyOut6 #-} +happyIn7 :: (([HsImportDecl],[HsDecl])) -> (HappyAbsSyn ) +happyIn7 x = unsafeCoerce# x +{-# INLINE happyIn7 #-} +happyOut7 :: (HappyAbsSyn ) -> (([HsImportDecl],[HsDecl])) +happyOut7 x = unsafeCoerce# x +{-# INLINE happyOut7 #-} +happyIn8 :: (([HsImportDecl],[HsDecl])) -> (HappyAbsSyn ) +happyIn8 x = unsafeCoerce# x +{-# INLINE happyIn8 #-} +happyOut8 :: (HappyAbsSyn ) -> (([HsImportDecl],[HsDecl])) +happyOut8 x = unsafeCoerce# x +{-# INLINE happyOut8 #-} +happyIn9 :: (()) -> (HappyAbsSyn ) +happyIn9 x = unsafeCoerce# x +{-# INLINE happyIn9 #-} +happyOut9 :: (HappyAbsSyn ) -> (()) +happyOut9 x = unsafeCoerce# x +{-# INLINE happyOut9 #-} +happyIn10 :: (()) -> (HappyAbsSyn ) +happyIn10 x = unsafeCoerce# x +{-# INLINE happyIn10 #-} +happyOut10 :: (HappyAbsSyn ) -> (()) +happyOut10 x = unsafeCoerce# x +{-# INLINE happyOut10 #-} +happyIn11 :: (Maybe [HsExportSpec]) -> (HappyAbsSyn ) +happyIn11 x = unsafeCoerce# x +{-# INLINE happyIn11 #-} +happyOut11 :: (HappyAbsSyn ) -> (Maybe [HsExportSpec]) +happyOut11 x = unsafeCoerce# x +{-# INLINE happyOut11 #-} +happyIn12 :: ([HsExportSpec]) -> (HappyAbsSyn ) +happyIn12 x = unsafeCoerce# x +{-# INLINE happyIn12 #-} +happyOut12 :: (HappyAbsSyn ) -> ([HsExportSpec]) +happyOut12 x = unsafeCoerce# x +{-# INLINE happyOut12 #-} +happyIn13 :: (()) -> (HappyAbsSyn ) +happyIn13 x = unsafeCoerce# x +{-# INLINE happyIn13 #-} +happyOut13 :: (HappyAbsSyn ) -> (()) +happyOut13 x = unsafeCoerce# x +{-# INLINE happyOut13 #-} +happyIn14 :: ([HsExportSpec]) -> (HappyAbsSyn ) +happyIn14 x = unsafeCoerce# x +{-# INLINE happyIn14 #-} +happyOut14 :: (HappyAbsSyn ) -> ([HsExportSpec]) +happyOut14 x = unsafeCoerce# x +{-# INLINE happyOut14 #-} +happyIn15 :: (HsExportSpec) -> (HappyAbsSyn ) +happyIn15 x = unsafeCoerce# x +{-# INLINE happyIn15 #-} +happyOut15 :: (HappyAbsSyn ) -> (HsExportSpec) +happyOut15 x = unsafeCoerce# x +{-# INLINE happyOut15 #-} +happyIn16 :: ([HsImportDecl]) -> (HappyAbsSyn ) +happyIn16 x = unsafeCoerce# x +{-# INLINE happyIn16 #-} +happyOut16 :: (HappyAbsSyn ) -> ([HsImportDecl]) +happyOut16 x = unsafeCoerce# x +{-# INLINE happyOut16 #-} +happyIn17 :: (HsImportDecl) -> (HappyAbsSyn ) +happyIn17 x = unsafeCoerce# x +{-# INLINE happyIn17 #-} +happyOut17 :: (HappyAbsSyn ) -> (HsImportDecl) +happyOut17 x = unsafeCoerce# x +{-# INLINE happyOut17 #-} +happyIn18 :: (Bool) -> (HappyAbsSyn ) +happyIn18 x = unsafeCoerce# x +{-# INLINE happyIn18 #-} +happyOut18 :: (HappyAbsSyn ) -> (Bool) +happyOut18 x = unsafeCoerce# x +{-# INLINE happyOut18 #-} +happyIn19 :: (Maybe Module) -> (HappyAbsSyn ) +happyIn19 x = unsafeCoerce# x +{-# INLINE happyIn19 #-} +happyOut19 :: (HappyAbsSyn ) -> (Maybe Module) +happyOut19 x = unsafeCoerce# x +{-# INLINE happyOut19 #-} +happyIn20 :: (Maybe (Bool, [HsImportSpec])) -> (HappyAbsSyn ) +happyIn20 x = unsafeCoerce# x +{-# INLINE happyIn20 #-} +happyOut20 :: (HappyAbsSyn ) -> (Maybe (Bool, [HsImportSpec])) +happyOut20 x = unsafeCoerce# x +{-# INLINE happyOut20 #-} +happyIn21 :: ((Bool, [HsImportSpec])) -> (HappyAbsSyn ) +happyIn21 x = unsafeCoerce# x +{-# INLINE happyIn21 #-} +happyOut21 :: (HappyAbsSyn ) -> ((Bool, [HsImportSpec])) +happyOut21 x = unsafeCoerce# x +{-# INLINE happyOut21 #-} +happyIn22 :: (Bool) -> (HappyAbsSyn ) +happyIn22 x = unsafeCoerce# x +{-# INLINE happyIn22 #-} +happyOut22 :: (HappyAbsSyn ) -> (Bool) +happyOut22 x = unsafeCoerce# x +{-# INLINE happyOut22 #-} +happyIn23 :: ([HsImportSpec]) -> (HappyAbsSyn ) +happyIn23 x = unsafeCoerce# x +{-# INLINE happyIn23 #-} +happyOut23 :: (HappyAbsSyn ) -> ([HsImportSpec]) +happyOut23 x = unsafeCoerce# x +{-# INLINE happyOut23 #-} +happyIn24 :: (HsImportSpec) -> (HappyAbsSyn ) +happyIn24 x = unsafeCoerce# x +{-# INLINE happyIn24 #-} +happyOut24 :: (HappyAbsSyn ) -> (HsImportSpec) +happyOut24 x = unsafeCoerce# x +{-# INLINE happyOut24 #-} +happyIn25 :: ([HsCName]) -> (HappyAbsSyn ) +happyIn25 x = unsafeCoerce# x +{-# INLINE happyIn25 #-} +happyOut25 :: (HappyAbsSyn ) -> ([HsCName]) +happyOut25 x = unsafeCoerce# x +{-# INLINE happyOut25 #-} +happyIn26 :: (HsCName) -> (HappyAbsSyn ) +happyIn26 x = unsafeCoerce# x +{-# INLINE happyIn26 #-} +happyOut26 :: (HappyAbsSyn ) -> (HsCName) +happyOut26 x = unsafeCoerce# x +{-# INLINE happyOut26 #-} +happyIn27 :: (HsDecl) -> (HappyAbsSyn ) +happyIn27 x = unsafeCoerce# x +{-# INLINE happyIn27 #-} +happyOut27 :: (HappyAbsSyn ) -> (HsDecl) +happyOut27 x = unsafeCoerce# x +{-# INLINE happyOut27 #-} +happyIn28 :: (Int) -> (HappyAbsSyn ) +happyIn28 x = unsafeCoerce# x +{-# INLINE happyIn28 #-} +happyOut28 :: (HappyAbsSyn ) -> (Int) +happyOut28 x = unsafeCoerce# x +{-# INLINE happyOut28 #-} +happyIn29 :: (HsAssoc) -> (HappyAbsSyn ) +happyIn29 x = unsafeCoerce# x +{-# INLINE happyIn29 #-} +happyOut29 :: (HappyAbsSyn ) -> (HsAssoc) +happyOut29 x = unsafeCoerce# x +{-# INLINE happyOut29 #-} +happyIn30 :: ([HsOp]) -> (HappyAbsSyn ) +happyIn30 x = unsafeCoerce# x +{-# INLINE happyIn30 #-} +happyOut30 :: (HappyAbsSyn ) -> ([HsOp]) +happyOut30 x = unsafeCoerce# x +{-# INLINE happyOut30 #-} +happyIn31 :: ([HsDecl]) -> (HappyAbsSyn ) +happyIn31 x = unsafeCoerce# x +{-# INLINE happyIn31 #-} +happyOut31 :: (HappyAbsSyn ) -> ([HsDecl]) +happyOut31 x = unsafeCoerce# x +{-# INLINE happyOut31 #-} +happyIn32 :: ([HsDecl]) -> (HappyAbsSyn ) +happyIn32 x = unsafeCoerce# x +{-# INLINE happyIn32 #-} +happyOut32 :: (HappyAbsSyn ) -> ([HsDecl]) +happyOut32 x = unsafeCoerce# x +{-# INLINE happyOut32 #-} +happyIn33 :: (HsDecl) -> (HappyAbsSyn ) +happyIn33 x = unsafeCoerce# x +{-# INLINE happyIn33 #-} +happyOut33 :: (HappyAbsSyn ) -> (HsDecl) +happyOut33 x = unsafeCoerce# x +{-# INLINE happyOut33 #-} +happyIn34 :: (DataOrNew) -> (HappyAbsSyn ) +happyIn34 x = unsafeCoerce# x +{-# INLINE happyIn34 #-} +happyOut34 :: (HappyAbsSyn ) -> (DataOrNew) +happyOut34 x = unsafeCoerce# x +{-# INLINE happyOut34 #-} +happyIn35 :: ([HsType]) -> (HappyAbsSyn ) +happyIn35 x = unsafeCoerce# x +{-# INLINE happyIn35 #-} +happyOut35 :: (HappyAbsSyn ) -> ([HsType]) +happyOut35 x = unsafeCoerce# x +{-# INLINE happyOut35 #-} +happyIn36 :: ([HsDecl]) -> (HappyAbsSyn ) +happyIn36 x = unsafeCoerce# x +{-# INLINE happyIn36 #-} +happyOut36 :: (HappyAbsSyn ) -> ([HsDecl]) +happyOut36 x = unsafeCoerce# x +{-# INLINE happyOut36 #-} +happyIn37 :: ([HsDecl]) -> (HappyAbsSyn ) +happyIn37 x = unsafeCoerce# x +{-# INLINE happyIn37 #-} +happyOut37 :: (HappyAbsSyn ) -> ([HsDecl]) +happyOut37 x = unsafeCoerce# x +{-# INLINE happyOut37 #-} +happyIn38 :: (HsDecl) -> (HappyAbsSyn ) +happyIn38 x = unsafeCoerce# x +{-# INLINE happyIn38 #-} +happyOut38 :: (HappyAbsSyn ) -> (HsDecl) +happyOut38 x = unsafeCoerce# x +{-# INLINE happyOut38 #-} +happyIn39 :: ([HsDecl]) -> (HappyAbsSyn ) +happyIn39 x = unsafeCoerce# x +{-# INLINE happyIn39 #-} +happyOut39 :: (HappyAbsSyn ) -> ([HsDecl]) +happyOut39 x = unsafeCoerce# x +{-# INLINE happyOut39 #-} +happyIn40 :: (HsDecl) -> (HappyAbsSyn ) +happyIn40 x = unsafeCoerce# x +{-# INLINE happyIn40 #-} +happyOut40 :: (HappyAbsSyn ) -> (HsDecl) +happyOut40 x = unsafeCoerce# x +{-# INLINE happyOut40 #-} +happyIn41 :: (HsBinds) -> (HappyAbsSyn ) +happyIn41 x = unsafeCoerce# x +{-# INLINE happyIn41 #-} +happyOut41 :: (HappyAbsSyn ) -> (HsBinds) +happyOut41 x = unsafeCoerce# x +{-# INLINE happyOut41 #-} +happyIn42 :: ([HsName]) -> (HappyAbsSyn ) +happyIn42 x = unsafeCoerce# x +{-# INLINE happyIn42 #-} +happyOut42 :: (HappyAbsSyn ) -> ([HsName]) +happyOut42 x = unsafeCoerce# x +{-# INLINE happyOut42 #-} +happyIn43 :: (HsCallConv) -> (HappyAbsSyn ) +happyIn43 x = unsafeCoerce# x +{-# INLINE happyIn43 #-} +happyOut43 :: (HappyAbsSyn ) -> (HsCallConv) +happyOut43 x = unsafeCoerce# x +{-# INLINE happyOut43 #-} +happyIn44 :: (HsSafety) -> (HappyAbsSyn ) +happyIn44 x = unsafeCoerce# x +{-# INLINE happyIn44 #-} +happyOut44 :: (HappyAbsSyn ) -> (HsSafety) +happyOut44 x = unsafeCoerce# x +{-# INLINE happyOut44 #-} +happyIn45 :: ((String, HsName, HsType)) -> (HappyAbsSyn ) +happyIn45 x = unsafeCoerce# x +{-# INLINE happyIn45 #-} +happyOut45 :: (HappyAbsSyn ) -> ((String, HsName, HsType)) +happyOut45 x = unsafeCoerce# x +{-# INLINE happyOut45 #-} +happyIn46 :: (HsType) -> (HappyAbsSyn ) +happyIn46 x = unsafeCoerce# x +{-# INLINE happyIn46 #-} +happyOut46 :: (HappyAbsSyn ) -> (HsType) +happyOut46 x = unsafeCoerce# x +{-# INLINE happyOut46 #-} +happyIn47 :: (HsType) -> (HappyAbsSyn ) +happyIn47 x = unsafeCoerce# x +{-# INLINE happyIn47 #-} +happyOut47 :: (HappyAbsSyn ) -> (HsType) +happyOut47 x = unsafeCoerce# x +{-# INLINE happyOut47 #-} +happyIn48 :: (HsType) -> (HappyAbsSyn ) +happyIn48 x = unsafeCoerce# x +{-# INLINE happyIn48 #-} +happyOut48 :: (HappyAbsSyn ) -> (HsType) +happyOut48 x = unsafeCoerce# x +{-# INLINE happyOut48 #-} +happyIn49 :: (HsType) -> (HappyAbsSyn ) +happyIn49 x = unsafeCoerce# x +{-# INLINE happyIn49 #-} +happyOut49 :: (HappyAbsSyn ) -> (HsType) +happyOut49 x = unsafeCoerce# x +{-# INLINE happyOut49 #-} +happyIn50 :: (HsQName) -> (HappyAbsSyn ) +happyIn50 x = unsafeCoerce# x +{-# INLINE happyIn50 #-} +happyOut50 :: (HappyAbsSyn ) -> (HsQName) +happyOut50 x = unsafeCoerce# x +{-# INLINE happyOut50 #-} +happyIn51 :: (HsQName) -> (HappyAbsSyn ) +happyIn51 x = unsafeCoerce# x +{-# INLINE happyIn51 #-} +happyOut51 :: (HappyAbsSyn ) -> (HsQName) +happyOut51 x = unsafeCoerce# x +{-# INLINE happyOut51 #-} +happyIn52 :: (HsType) -> (HappyAbsSyn ) +happyIn52 x = unsafeCoerce# x +{-# INLINE happyIn52 #-} +happyOut52 :: (HappyAbsSyn ) -> (HsType) +happyOut52 x = unsafeCoerce# x +{-# INLINE happyOut52 #-} +happyIn53 :: (HsContext) -> (HappyAbsSyn ) +happyIn53 x = unsafeCoerce# x +{-# INLINE happyIn53 #-} +happyOut53 :: (HappyAbsSyn ) -> (HsContext) +happyOut53 x = unsafeCoerce# x +{-# INLINE happyOut53 #-} +happyIn54 :: ([HsType]) -> (HappyAbsSyn ) +happyIn54 x = unsafeCoerce# x +{-# INLINE happyIn54 #-} +happyOut54 :: (HappyAbsSyn ) -> ([HsType]) +happyOut54 x = unsafeCoerce# x +{-# INLINE happyOut54 #-} +happyIn55 :: ([HsType]) -> (HappyAbsSyn ) +happyIn55 x = unsafeCoerce# x +{-# INLINE happyIn55 #-} +happyOut55 :: (HappyAbsSyn ) -> ([HsType]) +happyOut55 x = unsafeCoerce# x +{-# INLINE happyOut55 #-} +happyIn56 :: ([HsTyVarBind]) -> (HappyAbsSyn ) +happyIn56 x = unsafeCoerce# x +{-# INLINE happyIn56 #-} +happyOut56 :: (HappyAbsSyn ) -> ([HsTyVarBind]) +happyOut56 x = unsafeCoerce# x +{-# INLINE happyOut56 #-} +happyIn57 :: (HsTyVarBind) -> (HappyAbsSyn ) +happyIn57 x = unsafeCoerce# x +{-# INLINE happyIn57 #-} +happyOut57 :: (HappyAbsSyn ) -> (HsTyVarBind) +happyOut57 x = unsafeCoerce# x +{-# INLINE happyOut57 #-} +happyIn58 :: ([HsName]) -> (HappyAbsSyn ) +happyIn58 x = unsafeCoerce# x +{-# INLINE happyIn58 #-} +happyOut58 :: (HappyAbsSyn ) -> ([HsName]) +happyOut58 x = unsafeCoerce# x +{-# INLINE happyOut58 #-} +happyIn59 :: ([HsFunDep]) -> (HappyAbsSyn ) +happyIn59 x = unsafeCoerce# x +{-# INLINE happyIn59 #-} +happyOut59 :: (HappyAbsSyn ) -> ([HsFunDep]) +happyOut59 x = unsafeCoerce# x +{-# INLINE happyOut59 #-} +happyIn60 :: ([HsFunDep]) -> (HappyAbsSyn ) +happyIn60 x = unsafeCoerce# x +{-# INLINE happyIn60 #-} +happyOut60 :: (HappyAbsSyn ) -> ([HsFunDep]) +happyOut60 x = unsafeCoerce# x +{-# INLINE happyOut60 #-} +happyIn61 :: (HsFunDep) -> (HappyAbsSyn ) +happyIn61 x = unsafeCoerce# x +{-# INLINE happyIn61 #-} +happyOut61 :: (HappyAbsSyn ) -> (HsFunDep) +happyOut61 x = unsafeCoerce# x +{-# INLINE happyOut61 #-} +happyIn62 :: ([HsGadtDecl]) -> (HappyAbsSyn ) +happyIn62 x = unsafeCoerce# x +{-# INLINE happyIn62 #-} +happyOut62 :: (HappyAbsSyn ) -> ([HsGadtDecl]) +happyOut62 x = unsafeCoerce# x +{-# INLINE happyOut62 #-} +happyIn63 :: ([HsGadtDecl]) -> (HappyAbsSyn ) +happyIn63 x = unsafeCoerce# x +{-# INLINE happyIn63 #-} +happyOut63 :: (HappyAbsSyn ) -> ([HsGadtDecl]) +happyOut63 x = unsafeCoerce# x +{-# INLINE happyOut63 #-} +happyIn64 :: ([HsGadtDecl]) -> (HappyAbsSyn ) +happyIn64 x = unsafeCoerce# x +{-# INLINE happyIn64 #-} +happyOut64 :: (HappyAbsSyn ) -> ([HsGadtDecl]) +happyOut64 x = unsafeCoerce# x +{-# INLINE happyOut64 #-} +happyIn65 :: (HsGadtDecl) -> (HappyAbsSyn ) +happyIn65 x = unsafeCoerce# x +{-# INLINE happyIn65 #-} +happyOut65 :: (HappyAbsSyn ) -> (HsGadtDecl) +happyOut65 x = unsafeCoerce# x +{-# INLINE happyOut65 #-} +happyIn66 :: ([HsQualConDecl]) -> (HappyAbsSyn ) +happyIn66 x = unsafeCoerce# x +{-# INLINE happyIn66 #-} +happyOut66 :: (HappyAbsSyn ) -> ([HsQualConDecl]) +happyOut66 x = unsafeCoerce# x +{-# INLINE happyOut66 #-} +happyIn67 :: ([HsQualConDecl]) -> (HappyAbsSyn ) +happyIn67 x = unsafeCoerce# x +{-# INLINE happyIn67 #-} +happyOut67 :: (HappyAbsSyn ) -> ([HsQualConDecl]) +happyOut67 x = unsafeCoerce# x +{-# INLINE happyOut67 #-} +happyIn68 :: (HsQualConDecl) -> (HappyAbsSyn ) +happyIn68 x = unsafeCoerce# x +{-# INLINE happyIn68 #-} +happyOut68 :: (HappyAbsSyn ) -> (HsQualConDecl) +happyOut68 x = unsafeCoerce# x +{-# INLINE happyOut68 #-} +happyIn69 :: ([HsTyVarBind]) -> (HappyAbsSyn ) +happyIn69 x = unsafeCoerce# x +{-# INLINE happyIn69 #-} +happyOut69 :: (HappyAbsSyn ) -> ([HsTyVarBind]) +happyOut69 x = unsafeCoerce# x +{-# INLINE happyOut69 #-} +happyIn70 :: (HsConDecl) -> (HappyAbsSyn ) +happyIn70 x = unsafeCoerce# x +{-# INLINE happyIn70 #-} +happyOut70 :: (HappyAbsSyn ) -> (HsConDecl) +happyOut70 x = unsafeCoerce# x +{-# INLINE happyOut70 #-} +happyIn71 :: ((HsName, [HsBangType])) -> (HappyAbsSyn ) +happyIn71 x = unsafeCoerce# x +{-# INLINE happyIn71 #-} +happyOut71 :: (HappyAbsSyn ) -> ((HsName, [HsBangType])) +happyOut71 x = unsafeCoerce# x +{-# INLINE happyOut71 #-} +happyIn72 :: ((HsName, [HsBangType])) -> (HappyAbsSyn ) +happyIn72 x = unsafeCoerce# x +{-# INLINE happyIn72 #-} +happyOut72 :: (HappyAbsSyn ) -> ((HsName, [HsBangType])) +happyOut72 x = unsafeCoerce# x +{-# INLINE happyOut72 #-} +happyIn73 :: (HsBangType) -> (HappyAbsSyn ) +happyIn73 x = unsafeCoerce# x +{-# INLINE happyIn73 #-} +happyOut73 :: (HappyAbsSyn ) -> (HsBangType) +happyOut73 x = unsafeCoerce# x +{-# INLINE happyOut73 #-} +happyIn74 :: (HsBangType) -> (HappyAbsSyn ) +happyIn74 x = unsafeCoerce# x +{-# INLINE happyIn74 #-} +happyOut74 :: (HappyAbsSyn ) -> (HsBangType) +happyOut74 x = unsafeCoerce# x +{-# INLINE happyOut74 #-} +happyIn75 :: ([([HsName],HsBangType)]) -> (HappyAbsSyn ) +happyIn75 x = unsafeCoerce# x +{-# INLINE happyIn75 #-} +happyOut75 :: (HappyAbsSyn ) -> ([([HsName],HsBangType)]) +happyOut75 x = unsafeCoerce# x +{-# INLINE happyOut75 #-} +happyIn76 :: (([HsName],HsBangType)) -> (HappyAbsSyn ) +happyIn76 x = unsafeCoerce# x +{-# INLINE happyIn76 #-} +happyOut76 :: (HappyAbsSyn ) -> (([HsName],HsBangType)) +happyOut76 x = unsafeCoerce# x +{-# INLINE happyOut76 #-} +happyIn77 :: (HsBangType) -> (HappyAbsSyn ) +happyIn77 x = unsafeCoerce# x +{-# INLINE happyIn77 #-} +happyOut77 :: (HappyAbsSyn ) -> (HsBangType) +happyOut77 x = unsafeCoerce# x +{-# INLINE happyOut77 #-} +happyIn78 :: ([HsQName]) -> (HappyAbsSyn ) +happyIn78 x = unsafeCoerce# x +{-# INLINE happyIn78 #-} +happyOut78 :: (HappyAbsSyn ) -> ([HsQName]) +happyOut78 x = unsafeCoerce# x +{-# INLINE happyOut78 #-} +happyIn79 :: ([HsQName]) -> (HappyAbsSyn ) +happyIn79 x = unsafeCoerce# x +{-# INLINE happyIn79 #-} +happyOut79 :: (HappyAbsSyn ) -> ([HsQName]) +happyOut79 x = unsafeCoerce# x +{-# INLINE happyOut79 #-} +happyIn80 :: (HsKind) -> (HappyAbsSyn ) +happyIn80 x = unsafeCoerce# x +{-# INLINE happyIn80 #-} +happyOut80 :: (HappyAbsSyn ) -> (HsKind) +happyOut80 x = unsafeCoerce# x +{-# INLINE happyOut80 #-} +happyIn81 :: (HsKind) -> (HappyAbsSyn ) +happyIn81 x = unsafeCoerce# x +{-# INLINE happyIn81 #-} +happyOut81 :: (HappyAbsSyn ) -> (HsKind) +happyOut81 x = unsafeCoerce# x +{-# INLINE happyOut81 #-} +happyIn82 :: (Maybe HsKind) -> (HappyAbsSyn ) +happyIn82 x = unsafeCoerce# x +{-# INLINE happyIn82 #-} +happyOut82 :: (HappyAbsSyn ) -> (Maybe HsKind) +happyOut82 x = unsafeCoerce# x +{-# INLINE happyOut82 #-} +happyIn83 :: ([HsClassDecl]) -> (HappyAbsSyn ) +happyIn83 x = unsafeCoerce# x +{-# INLINE happyIn83 #-} +happyOut83 :: (HappyAbsSyn ) -> ([HsClassDecl]) +happyOut83 x = unsafeCoerce# x +{-# INLINE happyOut83 #-} +happyIn84 :: ([HsClassDecl]) -> (HappyAbsSyn ) +happyIn84 x = unsafeCoerce# x +{-# INLINE happyIn84 #-} +happyOut84 :: (HappyAbsSyn ) -> ([HsClassDecl]) +happyOut84 x = unsafeCoerce# x +{-# INLINE happyOut84 #-} +happyIn85 :: ([HsClassDecl]) -> (HappyAbsSyn ) +happyIn85 x = unsafeCoerce# x +{-# INLINE happyIn85 #-} +happyOut85 :: (HappyAbsSyn ) -> ([HsClassDecl]) +happyOut85 x = unsafeCoerce# x +{-# INLINE happyOut85 #-} +happyIn86 :: ([HsClassDecl]) -> (HappyAbsSyn ) +happyIn86 x = unsafeCoerce# x +{-# INLINE happyIn86 #-} +happyOut86 :: (HappyAbsSyn ) -> ([HsClassDecl]) +happyOut86 x = unsafeCoerce# x +{-# INLINE happyOut86 #-} +happyIn87 :: (HsClassDecl) -> (HappyAbsSyn ) +happyIn87 x = unsafeCoerce# x +{-# INLINE happyIn87 #-} +happyOut87 :: (HappyAbsSyn ) -> (HsClassDecl) +happyOut87 x = unsafeCoerce# x +{-# INLINE happyOut87 #-} +happyIn88 :: (HsClassDecl) -> (HappyAbsSyn ) +happyIn88 x = unsafeCoerce# x +{-# INLINE happyIn88 #-} +happyOut88 :: (HappyAbsSyn ) -> (HsClassDecl) +happyOut88 x = unsafeCoerce# x +{-# INLINE happyOut88 #-} +happyIn89 :: ([HsInstDecl]) -> (HappyAbsSyn ) +happyIn89 x = unsafeCoerce# x +{-# INLINE happyIn89 #-} +happyOut89 :: (HappyAbsSyn ) -> ([HsInstDecl]) +happyOut89 x = unsafeCoerce# x +{-# INLINE happyOut89 #-} +happyIn90 :: ([HsInstDecl]) -> (HappyAbsSyn ) +happyIn90 x = unsafeCoerce# x +{-# INLINE happyIn90 #-} +happyOut90 :: (HappyAbsSyn ) -> ([HsInstDecl]) +happyOut90 x = unsafeCoerce# x +{-# INLINE happyOut90 #-} +happyIn91 :: ([HsInstDecl]) -> (HappyAbsSyn ) +happyIn91 x = unsafeCoerce# x +{-# INLINE happyIn91 #-} +happyOut91 :: (HappyAbsSyn ) -> ([HsInstDecl]) +happyOut91 x = unsafeCoerce# x +{-# INLINE happyOut91 #-} +happyIn92 :: (HsInstDecl) -> (HappyAbsSyn ) +happyIn92 x = unsafeCoerce# x +{-# INLINE happyIn92 #-} +happyOut92 :: (HappyAbsSyn ) -> (HsInstDecl) +happyOut92 x = unsafeCoerce# x +{-# INLINE happyOut92 #-} +happyIn93 :: (HsInstDecl) -> (HappyAbsSyn ) +happyIn93 x = unsafeCoerce# x +{-# INLINE happyIn93 #-} +happyOut93 :: (HappyAbsSyn ) -> (HsInstDecl) +happyOut93 x = unsafeCoerce# x +{-# INLINE happyOut93 #-} +happyIn94 :: (HsDecl) -> (HappyAbsSyn ) +happyIn94 x = unsafeCoerce# x +{-# INLINE happyIn94 #-} +happyOut94 :: (HappyAbsSyn ) -> (HsDecl) +happyOut94 x = unsafeCoerce# x +{-# INLINE happyOut94 #-} +happyIn95 :: (HsBinds) -> (HappyAbsSyn ) +happyIn95 x = unsafeCoerce# x +{-# INLINE happyIn95 #-} +happyOut95 :: (HappyAbsSyn ) -> (HsBinds) +happyOut95 x = unsafeCoerce# x +{-# INLINE happyOut95 #-} +happyIn96 :: (HsRhs) -> (HappyAbsSyn ) +happyIn96 x = unsafeCoerce# x +{-# INLINE happyIn96 #-} +happyOut96 :: (HappyAbsSyn ) -> (HsRhs) +happyOut96 x = unsafeCoerce# x +{-# INLINE happyOut96 #-} +happyIn97 :: ([HsGuardedRhs]) -> (HappyAbsSyn ) +happyIn97 x = unsafeCoerce# x +{-# INLINE happyIn97 #-} +happyOut97 :: (HappyAbsSyn ) -> ([HsGuardedRhs]) +happyOut97 x = unsafeCoerce# x +{-# INLINE happyOut97 #-} +happyIn98 :: (HsGuardedRhs) -> (HappyAbsSyn ) +happyIn98 x = unsafeCoerce# x +{-# INLINE happyIn98 #-} +happyOut98 :: (HappyAbsSyn ) -> (HsGuardedRhs) +happyOut98 x = unsafeCoerce# x +{-# INLINE happyOut98 #-} +happyIn99 :: (HsExp) -> (HappyAbsSyn ) +happyIn99 x = unsafeCoerce# x +{-# INLINE happyIn99 #-} +happyOut99 :: (HappyAbsSyn ) -> (HsExp) +happyOut99 x = unsafeCoerce# x +{-# INLINE happyOut99 #-} +happyIn100 :: (HsExp) -> (HappyAbsSyn ) +happyIn100 x = unsafeCoerce# x +{-# INLINE happyIn100 #-} +happyOut100 :: (HappyAbsSyn ) -> (HsExp) +happyOut100 x = unsafeCoerce# x +{-# INLINE happyOut100 #-} +happyIn101 :: (HsExp) -> (HappyAbsSyn ) +happyIn101 x = unsafeCoerce# x +{-# INLINE happyIn101 #-} +happyOut101 :: (HappyAbsSyn ) -> (HsExp) +happyOut101 x = unsafeCoerce# x +{-# INLINE happyOut101 #-} +happyIn102 :: (HsExp) -> (HappyAbsSyn ) +happyIn102 x = unsafeCoerce# x +{-# INLINE happyIn102 #-} +happyOut102 :: (HappyAbsSyn ) -> (HsExp) +happyOut102 x = unsafeCoerce# x +{-# INLINE happyOut102 #-} +happyIn103 :: (HsExp) -> (HappyAbsSyn ) +happyIn103 x = unsafeCoerce# x +{-# INLINE happyIn103 #-} +happyOut103 :: (HappyAbsSyn ) -> (HsExp) +happyOut103 x = unsafeCoerce# x +{-# INLINE happyOut103 #-} +happyIn104 :: (HsExp) -> (HappyAbsSyn ) +happyIn104 x = unsafeCoerce# x +{-# INLINE happyIn104 #-} +happyOut104 :: (HappyAbsSyn ) -> (HsExp) +happyOut104 x = unsafeCoerce# x +{-# INLINE happyOut104 #-} +happyIn105 :: (HsExp) -> (HappyAbsSyn ) +happyIn105 x = unsafeCoerce# x +{-# INLINE happyIn105 #-} +happyOut105 :: (HappyAbsSyn ) -> (HsExp) +happyOut105 x = unsafeCoerce# x +{-# INLINE happyOut105 #-} +happyIn106 :: ([HsPat]) -> (HappyAbsSyn ) +happyIn106 x = unsafeCoerce# x +{-# INLINE happyIn106 #-} +happyOut106 :: (HappyAbsSyn ) -> ([HsPat]) +happyOut106 x = unsafeCoerce# x +{-# INLINE happyOut106 #-} +happyIn107 :: (HsPat) -> (HappyAbsSyn ) +happyIn107 x = unsafeCoerce# x +{-# INLINE happyIn107 #-} +happyOut107 :: (HappyAbsSyn ) -> (HsPat) +happyOut107 x = unsafeCoerce# x +{-# INLINE happyOut107 #-} +happyIn108 :: (HsExp) -> (HappyAbsSyn ) +happyIn108 x = unsafeCoerce# x +{-# INLINE happyIn108 #-} +happyOut108 :: (HappyAbsSyn ) -> (HsExp) +happyOut108 x = unsafeCoerce# x +{-# INLINE happyOut108 #-} +happyIn109 :: (HsExp) -> (HappyAbsSyn ) +happyIn109 x = unsafeCoerce# x +{-# INLINE happyIn109 #-} +happyOut109 :: (HappyAbsSyn ) -> (HsExp) +happyOut109 x = unsafeCoerce# x +{-# INLINE happyOut109 #-} +happyIn110 :: (HsExp) -> (HappyAbsSyn ) +happyIn110 x = unsafeCoerce# x +{-# INLINE happyIn110 #-} +happyOut110 :: (HappyAbsSyn ) -> (HsExp) +happyOut110 x = unsafeCoerce# x +{-# INLINE happyOut110 #-} +happyIn111 :: (HsReify) -> (HappyAbsSyn ) +happyIn111 x = unsafeCoerce# x +{-# INLINE happyIn111 #-} +happyOut111 :: (HappyAbsSyn ) -> (HsReify) +happyOut111 x = unsafeCoerce# x +{-# INLINE happyOut111 #-} +happyIn112 :: (HsQName) -> (HappyAbsSyn ) +happyIn112 x = unsafeCoerce# x +{-# INLINE happyIn112 #-} +happyOut112 :: (HappyAbsSyn ) -> (HsQName) +happyOut112 x = unsafeCoerce# x +{-# INLINE happyOut112 #-} +happyIn113 :: (Int) -> (HappyAbsSyn ) +happyIn113 x = unsafeCoerce# x +{-# INLINE happyIn113 #-} +happyOut113 :: (HappyAbsSyn ) -> (Int) +happyOut113 x = unsafeCoerce# x +{-# INLINE happyOut113 #-} +happyIn114 :: ([HsExp]) -> (HappyAbsSyn ) +happyIn114 x = unsafeCoerce# x +{-# INLINE happyIn114 #-} +happyOut114 :: (HappyAbsSyn ) -> ([HsExp]) +happyOut114 x = unsafeCoerce# x +{-# INLINE happyOut114 #-} +happyIn115 :: ([HsExp]) -> (HappyAbsSyn ) +happyIn115 x = unsafeCoerce# x +{-# INLINE happyIn115 #-} +happyOut115 :: (HappyAbsSyn ) -> ([HsExp]) +happyOut115 x = unsafeCoerce# x +{-# INLINE happyOut115 #-} +happyIn116 :: (HsExp) -> (HappyAbsSyn ) +happyIn116 x = unsafeCoerce# x +{-# INLINE happyIn116 #-} +happyOut116 :: (HappyAbsSyn ) -> (HsExp) +happyOut116 x = unsafeCoerce# x +{-# INLINE happyOut116 #-} +happyIn117 :: (HsExp) -> (HappyAbsSyn ) +happyIn117 x = unsafeCoerce# x +{-# INLINE happyIn117 #-} +happyOut117 :: (HappyAbsSyn ) -> (HsExp) +happyOut117 x = unsafeCoerce# x +{-# INLINE happyOut117 #-} +happyIn118 :: (HsExp) -> (HappyAbsSyn ) +happyIn118 x = unsafeCoerce# x +{-# INLINE happyIn118 #-} +happyOut118 :: (HappyAbsSyn ) -> (HsExp) +happyOut118 x = unsafeCoerce# x +{-# INLINE happyOut118 #-} +happyIn119 :: ([HsExp]) -> (HappyAbsSyn ) +happyIn119 x = unsafeCoerce# x +{-# INLINE happyIn119 #-} +happyOut119 :: (HappyAbsSyn ) -> ([HsExp]) +happyOut119 x = unsafeCoerce# x +{-# INLINE happyOut119 #-} +happyIn120 :: (HsExp) -> (HappyAbsSyn ) +happyIn120 x = unsafeCoerce# x +{-# INLINE happyIn120 #-} +happyOut120 :: (HappyAbsSyn ) -> (HsExp) +happyOut120 x = unsafeCoerce# x +{-# INLINE happyOut120 #-} +happyIn121 :: (HsXName) -> (HappyAbsSyn ) +happyIn121 x = unsafeCoerce# x +{-# INLINE happyIn121 #-} +happyOut121 :: (HappyAbsSyn ) -> (HsXName) +happyOut121 x = unsafeCoerce# x +{-# INLINE happyOut121 #-} +happyIn122 :: (String) -> (HappyAbsSyn ) +happyIn122 x = unsafeCoerce# x +{-# INLINE happyIn122 #-} +happyOut122 :: (HappyAbsSyn ) -> (String) +happyOut122 x = unsafeCoerce# x +{-# INLINE happyOut122 #-} +happyIn123 :: ([HsXAttr]) -> (HappyAbsSyn ) +happyIn123 x = unsafeCoerce# x +{-# INLINE happyIn123 #-} +happyOut123 :: (HappyAbsSyn ) -> ([HsXAttr]) +happyOut123 x = unsafeCoerce# x +{-# INLINE happyOut123 #-} +happyIn124 :: (HsXAttr) -> (HappyAbsSyn ) +happyIn124 x = unsafeCoerce# x +{-# INLINE happyIn124 #-} +happyOut124 :: (HappyAbsSyn ) -> (HsXAttr) +happyOut124 x = unsafeCoerce# x +{-# INLINE happyOut124 #-} +happyIn125 :: (Maybe HsExp) -> (HappyAbsSyn ) +happyIn125 x = unsafeCoerce# x +{-# INLINE happyIn125 #-} +happyOut125 :: (HappyAbsSyn ) -> (Maybe HsExp) +happyOut125 x = unsafeCoerce# x +{-# INLINE happyOut125 #-} +happyIn126 :: (HsExp) -> (HappyAbsSyn ) +happyIn126 x = unsafeCoerce# x +{-# INLINE happyIn126 #-} +happyOut126 :: (HappyAbsSyn ) -> (HsExp) +happyOut126 x = unsafeCoerce# x +{-# INLINE happyOut126 #-} +happyIn127 :: (HsExp) -> (HappyAbsSyn ) +happyIn127 x = unsafeCoerce# x +{-# INLINE happyIn127 #-} +happyOut127 :: (HappyAbsSyn ) -> (HsExp) +happyOut127 x = unsafeCoerce# x +{-# INLINE happyOut127 #-} +happyIn128 :: ([HsExp]) -> (HappyAbsSyn ) +happyIn128 x = unsafeCoerce# x +{-# INLINE happyIn128 #-} +happyOut128 :: (HappyAbsSyn ) -> ([HsExp]) +happyOut128 x = unsafeCoerce# x +{-# INLINE happyOut128 #-} +happyIn129 :: ([HsStmt]) -> (HappyAbsSyn ) +happyIn129 x = unsafeCoerce# x +{-# INLINE happyIn129 #-} +happyOut129 :: (HappyAbsSyn ) -> ([HsStmt]) +happyOut129 x = unsafeCoerce# x +{-# INLINE happyOut129 #-} +happyIn130 :: (HsStmt) -> (HappyAbsSyn ) +happyIn130 x = unsafeCoerce# x +{-# INLINE happyIn130 #-} +happyOut130 :: (HappyAbsSyn ) -> (HsStmt) +happyOut130 x = unsafeCoerce# x +{-# INLINE happyOut130 #-} +happyIn131 :: ([HsAlt]) -> (HappyAbsSyn ) +happyIn131 x = unsafeCoerce# x +{-# INLINE happyIn131 #-} +happyOut131 :: (HappyAbsSyn ) -> ([HsAlt]) +happyOut131 x = unsafeCoerce# x +{-# INLINE happyOut131 #-} +happyIn132 :: ([HsAlt]) -> (HappyAbsSyn ) +happyIn132 x = unsafeCoerce# x +{-# INLINE happyIn132 #-} +happyOut132 :: (HappyAbsSyn ) -> ([HsAlt]) +happyOut132 x = unsafeCoerce# x +{-# INLINE happyOut132 #-} +happyIn133 :: ([HsAlt]) -> (HappyAbsSyn ) +happyIn133 x = unsafeCoerce# x +{-# INLINE happyIn133 #-} +happyOut133 :: (HappyAbsSyn ) -> ([HsAlt]) +happyOut133 x = unsafeCoerce# x +{-# INLINE happyOut133 #-} +happyIn134 :: (HsAlt) -> (HappyAbsSyn ) +happyIn134 x = unsafeCoerce# x +{-# INLINE happyIn134 #-} +happyOut134 :: (HappyAbsSyn ) -> (HsAlt) +happyOut134 x = unsafeCoerce# x +{-# INLINE happyOut134 #-} +happyIn135 :: (HsGuardedAlts) -> (HappyAbsSyn ) +happyIn135 x = unsafeCoerce# x +{-# INLINE happyIn135 #-} +happyOut135 :: (HappyAbsSyn ) -> (HsGuardedAlts) +happyOut135 x = unsafeCoerce# x +{-# INLINE happyOut135 #-} +happyIn136 :: ([HsGuardedAlt]) -> (HappyAbsSyn ) +happyIn136 x = unsafeCoerce# x +{-# INLINE happyIn136 #-} +happyOut136 :: (HappyAbsSyn ) -> ([HsGuardedAlt]) +happyOut136 x = unsafeCoerce# x +{-# INLINE happyOut136 #-} +happyIn137 :: (HsGuardedAlt) -> (HappyAbsSyn ) +happyIn137 x = unsafeCoerce# x +{-# INLINE happyIn137 #-} +happyOut137 :: (HappyAbsSyn ) -> (HsGuardedAlt) +happyOut137 x = unsafeCoerce# x +{-# INLINE happyOut137 #-} +happyIn138 :: (HsPat) -> (HappyAbsSyn ) +happyIn138 x = unsafeCoerce# x +{-# INLINE happyIn138 #-} +happyOut138 :: (HappyAbsSyn ) -> (HsPat) +happyOut138 x = unsafeCoerce# x +{-# INLINE happyOut138 #-} +happyIn139 :: ([HsStmt]) -> (HappyAbsSyn ) +happyIn139 x = unsafeCoerce# x +{-# INLINE happyIn139 #-} +happyOut139 :: (HappyAbsSyn ) -> ([HsStmt]) +happyOut139 x = unsafeCoerce# x +{-# INLINE happyOut139 #-} +happyIn140 :: ([HsStmt]) -> (HappyAbsSyn ) +happyIn140 x = unsafeCoerce# x +{-# INLINE happyIn140 #-} +happyOut140 :: (HappyAbsSyn ) -> ([HsStmt]) +happyOut140 x = unsafeCoerce# x +{-# INLINE happyOut140 #-} +happyIn141 :: ([HsFieldUpdate]) -> (HappyAbsSyn ) +happyIn141 x = unsafeCoerce# x +{-# INLINE happyIn141 #-} +happyOut141 :: (HappyAbsSyn ) -> ([HsFieldUpdate]) +happyOut141 x = unsafeCoerce# x +{-# INLINE happyOut141 #-} +happyIn142 :: (HsFieldUpdate) -> (HappyAbsSyn ) +happyIn142 x = unsafeCoerce# x +{-# INLINE happyIn142 #-} +happyOut142 :: (HappyAbsSyn ) -> (HsFieldUpdate) +happyOut142 x = unsafeCoerce# x +{-# INLINE happyOut142 #-} +happyIn143 :: ([HsIPBind]) -> (HappyAbsSyn ) +happyIn143 x = unsafeCoerce# x +{-# INLINE happyIn143 #-} +happyOut143 :: (HappyAbsSyn ) -> ([HsIPBind]) +happyOut143 x = unsafeCoerce# x +{-# INLINE happyOut143 #-} +happyIn144 :: ([HsIPBind]) -> (HappyAbsSyn ) +happyIn144 x = unsafeCoerce# x +{-# INLINE happyIn144 #-} +happyOut144 :: (HappyAbsSyn ) -> ([HsIPBind]) +happyOut144 x = unsafeCoerce# x +{-# INLINE happyOut144 #-} +happyIn145 :: ([HsIPBind]) -> (HappyAbsSyn ) +happyIn145 x = unsafeCoerce# x +{-# INLINE happyIn145 #-} +happyOut145 :: (HappyAbsSyn ) -> ([HsIPBind]) +happyOut145 x = unsafeCoerce# x +{-# INLINE happyOut145 #-} +happyIn146 :: (HsIPBind) -> (HappyAbsSyn ) +happyIn146 x = unsafeCoerce# x +{-# INLINE happyIn146 #-} +happyOut146 :: (HappyAbsSyn ) -> (HsIPBind) +happyOut146 x = unsafeCoerce# x +{-# INLINE happyOut146 #-} +happyIn147 :: (HsExp) -> (HappyAbsSyn ) +happyIn147 x = unsafeCoerce# x +{-# INLINE happyIn147 #-} +happyOut147 :: (HappyAbsSyn ) -> (HsExp) +happyOut147 x = unsafeCoerce# x +{-# INLINE happyOut147 #-} +happyIn148 :: (HsName) -> (HappyAbsSyn ) +happyIn148 x = unsafeCoerce# x +{-# INLINE happyIn148 #-} +happyOut148 :: (HappyAbsSyn ) -> (HsName) +happyOut148 x = unsafeCoerce# x +{-# INLINE happyOut148 #-} +happyIn149 :: (HsName) -> (HappyAbsSyn ) +happyIn149 x = unsafeCoerce# x +{-# INLINE happyIn149 #-} +happyOut149 :: (HappyAbsSyn ) -> (HsName) +happyOut149 x = unsafeCoerce# x +{-# INLINE happyOut149 #-} +happyIn150 :: (HsQName) -> (HappyAbsSyn ) +happyIn150 x = unsafeCoerce# x +{-# INLINE happyIn150 #-} +happyOut150 :: (HappyAbsSyn ) -> (HsQName) +happyOut150 x = unsafeCoerce# x +{-# INLINE happyOut150 #-} +happyIn151 :: (HsIPName) -> (HappyAbsSyn ) +happyIn151 x = unsafeCoerce# x +{-# INLINE happyIn151 #-} +happyOut151 :: (HappyAbsSyn ) -> (HsIPName) +happyOut151 x = unsafeCoerce# x +{-# INLINE happyOut151 #-} +happyIn152 :: (HsName) -> (HappyAbsSyn ) +happyIn152 x = unsafeCoerce# x +{-# INLINE happyIn152 #-} +happyOut152 :: (HappyAbsSyn ) -> (HsName) +happyOut152 x = unsafeCoerce# x +{-# INLINE happyOut152 #-} +happyIn153 :: (HsQName) -> (HappyAbsSyn ) +happyIn153 x = unsafeCoerce# x +{-# INLINE happyIn153 #-} +happyOut153 :: (HappyAbsSyn ) -> (HsQName) +happyOut153 x = unsafeCoerce# x +{-# INLINE happyOut153 #-} +happyIn154 :: (HsName) -> (HappyAbsSyn ) +happyIn154 x = unsafeCoerce# x +{-# INLINE happyIn154 #-} +happyOut154 :: (HappyAbsSyn ) -> (HsName) +happyOut154 x = unsafeCoerce# x +{-# INLINE happyOut154 #-} +happyIn155 :: (HsQName) -> (HappyAbsSyn ) +happyIn155 x = unsafeCoerce# x +{-# INLINE happyIn155 #-} +happyOut155 :: (HappyAbsSyn ) -> (HsQName) +happyOut155 x = unsafeCoerce# x +{-# INLINE happyOut155 #-} +happyIn156 :: (HsQName) -> (HappyAbsSyn ) +happyIn156 x = unsafeCoerce# x +{-# INLINE happyIn156 #-} +happyOut156 :: (HappyAbsSyn ) -> (HsQName) +happyOut156 x = unsafeCoerce# x +{-# INLINE happyOut156 #-} +happyIn157 :: (HsName) -> (HappyAbsSyn ) +happyIn157 x = unsafeCoerce# x +{-# INLINE happyIn157 #-} +happyOut157 :: (HappyAbsSyn ) -> (HsName) +happyOut157 x = unsafeCoerce# x +{-# INLINE happyOut157 #-} +happyIn158 :: (HsQName) -> (HappyAbsSyn ) +happyIn158 x = unsafeCoerce# x +{-# INLINE happyIn158 #-} +happyOut158 :: (HappyAbsSyn ) -> (HsQName) +happyOut158 x = unsafeCoerce# x +{-# INLINE happyOut158 #-} +happyIn159 :: (HsOp) -> (HappyAbsSyn ) +happyIn159 x = unsafeCoerce# x +{-# INLINE happyIn159 #-} +happyOut159 :: (HappyAbsSyn ) -> (HsOp) +happyOut159 x = unsafeCoerce# x +{-# INLINE happyOut159 #-} +happyIn160 :: (HsQOp) -> (HappyAbsSyn ) +happyIn160 x = unsafeCoerce# x +{-# INLINE happyIn160 #-} +happyOut160 :: (HappyAbsSyn ) -> (HsQOp) +happyOut160 x = unsafeCoerce# x +{-# INLINE happyOut160 #-} +happyIn161 :: (HsQOp) -> (HappyAbsSyn ) +happyIn161 x = unsafeCoerce# x +{-# INLINE happyIn161 #-} +happyOut161 :: (HappyAbsSyn ) -> (HsQOp) +happyOut161 x = unsafeCoerce# x +{-# INLINE happyOut161 #-} +happyIn162 :: (HsQName) -> (HappyAbsSyn ) +happyIn162 x = unsafeCoerce# x +{-# INLINE happyIn162 #-} +happyOut162 :: (HappyAbsSyn ) -> (HsQName) +happyOut162 x = unsafeCoerce# x +{-# INLINE happyOut162 #-} +happyIn163 :: (HsQName) -> (HappyAbsSyn ) +happyIn163 x = unsafeCoerce# x +{-# INLINE happyIn163 #-} +happyOut163 :: (HappyAbsSyn ) -> (HsQName) +happyOut163 x = unsafeCoerce# x +{-# INLINE happyOut163 #-} +happyIn164 :: (HsName) -> (HappyAbsSyn ) +happyIn164 x = unsafeCoerce# x +{-# INLINE happyIn164 #-} +happyOut164 :: (HappyAbsSyn ) -> (HsName) +happyOut164 x = unsafeCoerce# x +{-# INLINE happyOut164 #-} +happyIn165 :: (HsName) -> (HappyAbsSyn ) +happyIn165 x = unsafeCoerce# x +{-# INLINE happyIn165 #-} +happyOut165 :: (HappyAbsSyn ) -> (HsName) +happyOut165 x = unsafeCoerce# x +{-# INLINE happyOut165 #-} +happyIn166 :: (HsIPName) -> (HappyAbsSyn ) +happyIn166 x = unsafeCoerce# x +{-# INLINE happyIn166 #-} +happyOut166 :: (HappyAbsSyn ) -> (HsIPName) +happyOut166 x = unsafeCoerce# x +{-# INLINE happyOut166 #-} +happyIn167 :: (HsQName) -> (HappyAbsSyn ) +happyIn167 x = unsafeCoerce# x +{-# INLINE happyIn167 #-} +happyOut167 :: (HappyAbsSyn ) -> (HsQName) +happyOut167 x = unsafeCoerce# x +{-# INLINE happyOut167 #-} +happyIn168 :: (HsName) -> (HappyAbsSyn ) +happyIn168 x = unsafeCoerce# x +{-# INLINE happyIn168 #-} +happyOut168 :: (HappyAbsSyn ) -> (HsName) +happyOut168 x = unsafeCoerce# x +{-# INLINE happyOut168 #-} +happyIn169 :: (HsQName) -> (HappyAbsSyn ) +happyIn169 x = unsafeCoerce# x +{-# INLINE happyIn169 #-} +happyOut169 :: (HappyAbsSyn ) -> (HsQName) +happyOut169 x = unsafeCoerce# x +{-# INLINE happyOut169 #-} +happyIn170 :: (HsName) -> (HappyAbsSyn ) +happyIn170 x = unsafeCoerce# x +{-# INLINE happyIn170 #-} +happyOut170 :: (HappyAbsSyn ) -> (HsName) +happyOut170 x = unsafeCoerce# x +{-# INLINE happyOut170 #-} +happyIn171 :: (HsQName) -> (HappyAbsSyn ) +happyIn171 x = unsafeCoerce# x +{-# INLINE happyIn171 #-} +happyOut171 :: (HappyAbsSyn ) -> (HsQName) +happyOut171 x = unsafeCoerce# x +{-# INLINE happyOut171 #-} +happyIn172 :: (HsQName) -> (HappyAbsSyn ) +happyIn172 x = unsafeCoerce# x +{-# INLINE happyIn172 #-} +happyOut172 :: (HappyAbsSyn ) -> (HsQName) +happyOut172 x = unsafeCoerce# x +{-# INLINE happyOut172 #-} +happyIn173 :: (HsName) -> (HappyAbsSyn ) +happyIn173 x = unsafeCoerce# x +{-# INLINE happyIn173 #-} +happyOut173 :: (HappyAbsSyn ) -> (HsName) +happyOut173 x = unsafeCoerce# x +{-# INLINE happyOut173 #-} +happyIn174 :: (HsName) -> (HappyAbsSyn ) +happyIn174 x = unsafeCoerce# x +{-# INLINE happyIn174 #-} +happyOut174 :: (HappyAbsSyn ) -> (HsName) +happyOut174 x = unsafeCoerce# x +{-# INLINE happyOut174 #-} +happyIn175 :: (HsQName) -> (HappyAbsSyn ) +happyIn175 x = unsafeCoerce# x +{-# INLINE happyIn175 #-} +happyOut175 :: (HappyAbsSyn ) -> (HsQName) +happyOut175 x = unsafeCoerce# x +{-# INLINE happyOut175 #-} +happyIn176 :: (HsLiteral) -> (HappyAbsSyn ) +happyIn176 x = unsafeCoerce# x +{-# INLINE happyIn176 #-} +happyOut176 :: (HappyAbsSyn ) -> (HsLiteral) +happyOut176 x = unsafeCoerce# x +{-# INLINE happyOut176 #-} +happyIn177 :: (SrcLoc) -> (HappyAbsSyn ) +happyIn177 x = unsafeCoerce# x +{-# INLINE happyIn177 #-} +happyOut177 :: (HappyAbsSyn ) -> (SrcLoc) +happyOut177 x = unsafeCoerce# x +{-# INLINE happyOut177 #-} +happyIn178 :: (()) -> (HappyAbsSyn ) +happyIn178 x = unsafeCoerce# x +{-# INLINE happyIn178 #-} +happyOut178 :: (HappyAbsSyn ) -> (()) +happyOut178 x = unsafeCoerce# x +{-# INLINE happyOut178 #-} +happyIn179 :: (()) -> (HappyAbsSyn ) +happyIn179 x = unsafeCoerce# x +{-# INLINE happyIn179 #-} +happyOut179 :: (HappyAbsSyn ) -> (()) +happyOut179 x = unsafeCoerce# x +{-# INLINE happyOut179 #-} +happyIn180 :: (Module) -> (HappyAbsSyn ) +happyIn180 x = unsafeCoerce# x +{-# INLINE happyIn180 #-} +happyOut180 :: (HappyAbsSyn ) -> (Module) +happyOut180 x = unsafeCoerce# x +{-# INLINE happyOut180 #-} +happyIn181 :: (HsName) -> (HappyAbsSyn ) +happyIn181 x = unsafeCoerce# x +{-# INLINE happyIn181 #-} +happyOut181 :: (HappyAbsSyn ) -> (HsName) +happyOut181 x = unsafeCoerce# x +{-# INLINE happyOut181 #-} +happyIn182 :: (HsQName) -> (HappyAbsSyn ) +happyIn182 x = unsafeCoerce# x +{-# INLINE happyIn182 #-} +happyOut182 :: (HappyAbsSyn ) -> (HsQName) +happyOut182 x = unsafeCoerce# x +{-# INLINE happyOut182 #-} +happyIn183 :: (HsQName) -> (HappyAbsSyn ) +happyIn183 x = unsafeCoerce# x +{-# INLINE happyIn183 #-} +happyOut183 :: (HappyAbsSyn ) -> (HsQName) +happyOut183 x = unsafeCoerce# x +{-# INLINE happyOut183 #-} +happyIn184 :: (HsName) -> (HappyAbsSyn ) +happyIn184 x = unsafeCoerce# x +{-# INLINE happyIn184 #-} +happyOut184 :: (HappyAbsSyn ) -> (HsName) +happyOut184 x = unsafeCoerce# x +{-# INLINE happyOut184 #-} +happyIn185 :: (HsQName) -> (HappyAbsSyn ) +happyIn185 x = unsafeCoerce# x +{-# INLINE happyIn185 #-} +happyOut185 :: (HappyAbsSyn ) -> (HsQName) +happyOut185 x = unsafeCoerce# x +{-# INLINE happyOut185 #-} +happyIn186 :: (HsName) -> (HappyAbsSyn ) +happyIn186 x = unsafeCoerce# x +{-# INLINE happyIn186 #-} +happyOut186 :: (HappyAbsSyn ) -> (HsName) +happyOut186 x = unsafeCoerce# x +{-# INLINE happyOut186 #-} +happyInTok :: Token -> (HappyAbsSyn ) +happyInTok x = unsafeCoerce# x +{-# INLINE happyInTok #-} +happyOutTok :: (HappyAbsSyn ) -> Token +happyOutTok x = unsafeCoerce# x +{-# INLINE happyOutTok #-} + + +happyActOffsets :: HappyAddr +happyActOffsets = HappyA# "\x58\x06\x00\x00\x00\x00\x5b\x06\x2f\x06\x00\x00\xe3\x00\x00\x00\x45\x06\xa3\x00\x00\x00\x00\x00\x00\x00\x15\x01\x49\x05\x7c\x06\x00\x00\x00\x00\x00\x00\x6c\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x06\x00\x00\x6c\x05\x2d\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\x07\x00\x00\x00\x00\x15\x01\x09\x14\x1e\x06\x00\x00\x2d\x14\x75\x06\x6b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x06\x00\x00\x00\x00\x00\x00\x00\x00\x27\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x05\x00\x00\x6f\x06\x00\x00\x4e\x07\x00\x00\x00\x00\x5a\x06\x00\x00\x05\x05\x00\x00\x4c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x01\xb5\x03\x00\x00\x00\x00\xb2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x08\x05\xb0\x0c\x00\x00\xfb\x14\xfc\x10\x00\x00\xfc\x10\xfc\x10\xfc\x10\x09\x17\x00\x00\xfc\x10\x00\x00\x6e\x06\x59\x16\x9c\x02\x19\x0b\x00\x00\x5b\x14\x00\x00\x00\x00\x00\x00\xc8\x01\x00\x00\xfb\x14\xfc\x10\x8a\x17\x83\x17\x83\x17\x18\x02\xfc\x10\x09\x17\x1a\x06\x61\x06\x08\x06\x54\x06\x00\x06\x00\x00\x00\x00\x00\x00\x09\x17\x53\x06\x00\x00\x0f\x15\x94\x06\x50\x06\xd8\x05\x50\x06\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x07\x41\x06\xe0\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x15\x59\x17\xe3\x16\x59\x17\x60\x17\x00\x00\x4c\x0c\x4c\x0c\x00\x00\x00\x00\x80\x15\xfc\x05\x35\x06\x3e\x06\x00\x00\x32\x05\x00\x00\x00\x00\xdc\x16\x59\x17\xdc\x16\x37\x06\xf4\x05\x00\x00\x00\x00\x1f\x14\x00\x00\x00\x00\x43\x06\xfc\x10\x42\x06\xe6\x04\xe6\x04\x00\x00\x00\x00\x00\x00\x51\x0a\x3d\x06\x00\x00\x00\x00\x00\x00\x1f\x09\x3c\x06\x3a\x06\x5b\x14\xfb\x14\xfb\x14\x00\x00\xd6\x05\x20\x06\x00\x00\x00\x00\x00\x00\xae\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x42\x07\x00\x00\x00\x00\xfc\x10\x00\x00\x00\x00\x00\x00\xca\x12\xdc\x16\x2a\x01\xdc\x16\x61\x05\x00\x00\xf3\x05\x00\x00\x01\x06\xff\x05\x0e\x0a\xf8\x05\x23\x06\xfa\x05\x5d\x00\x00\x00\x00\x00\x00\x00\x55\x03\x19\x06\x17\x06\x00\x00\x4b\x01\x1f\x14\xa0\x03\x66\x03\x1d\x06\x00\x00\x00\x00\xfc\x10\x0f\x06\x0e\x06\x00\x00\x00\x00\x0d\x06\x0b\x06\x00\x00\x00\x00\x42\x07\x09\x06\x5b\x14\x05\x06\xfe\x05\xfc\x10\x15\x01\x00\x00\x00\x00\xfb\x14\xef\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x17\xfd\x05\x33\x17\x00\x00\x00\x00\x00\x00\x57\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x02\x00\x00\xfb\x05\xfb\x00\x00\x00\xec\x05\x00\x00\x00\x00\x7f\x04\x00\x00\xcd\x01\xee\x05\xed\x05\x00\x00\x00\x00\xf7\x05\x00\x00\x00\x00\xfc\x10\x00\x00\x00\x00\x98\x10\x00\x00\xf0\x05\x00\x00\x34\x10\x34\x10\x34\x10\x00\x00\x34\x10\x48\x0a\xd0\x0f\x6c\x0f\x00\x00\x00\x00\x00\x00\x94\x12\x00\x00\x00\x00\x7f\x01\x00\x00\xe9\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x11\x2a\x01\xb2\x05\x98\x05\x1c\x02\x00\x00\x00\x00\x00\x00\x71\x03\x00\x00\xe4\x05\x08\x0f\x00\x00\x00\x00\x00\x00\xe8\x05\x00\x00\x00\x00\x44\x06\x00\x00\x4c\x03\x00\x00\xeb\x05\xea\x05\xa1\x04\x00\x00\x00\x00\xe2\x07\x00\x00\xa0\x05\x00\x00\x00\x00\x91\x05\x9a\x05\x00\x00\x00\x00\xfb\x14\xe2\x05\x8c\x05\x00\x00\xd5\x05\xe1\x05\xda\x05\x00\x00\xc8\x05\x00\x00\xa1\x05\x32\x11\x95\x13\x59\x17\x00\x00\xce\x05\x00\x00\x95\x13\x00\x00\x95\x13\x00\x00\x00\x00\xae\x07\x95\x13\xcd\x05\x6e\x16\x00\x00\xca\x05\x4c\x0c\xc2\x05\x7f\x01\xb5\x05\xb4\x05\xba\x05\x00\x00\x1a\x03\xb7\x05\x25\x02\xb9\x05\xdc\x16\x00\x00\x00\x00\x00\x00\x1c\x02\x00\x00\x59\x17\x00\x00\x00\x00\xdc\x16\x00\x00\x7a\x00\x00\x00\x00\x00\xa4\x05\xb0\x08\x00\x00\xb3\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x06\xdc\x16\x57\x00\x28\x05\x59\x17\x00\x00\x00\x00\x9f\x05\xac\x05\x00\x00\x00\x00\xb0\x05\x00\x00\x00\x00\x00\x00\xab\x14\x00\x00\x00\x00\xae\x05\x9e\x05\x7f\x01\xa4\x0e\xa4\x0e\xe4\x09\x9d\x05\x9c\x05\x7f\x01\x7f\x01\xa4\x0e\x00\x00\x90\x05\x00\x00\x1a\x0b\x71\x03\xe2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x02\x00\x00\x00\x00\x95\x05\x00\x00\x92\x05\x7f\x05\x00\x00\x54\x05\x00\x00\x79\x05\x1c\x02\x00\x00\x00\x00\x84\x05\x00\x00\x37\x03\x42\x05\x1f\x05\x7a\x05\x75\x05\x61\x05\x51\x05\x00\x00\x00\x00\x6e\x05\x00\x00\x68\x05\x00\x00\x58\x05\x00\x00\x00\x00\x00\x00\xdc\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x14\x00\x00\x00\x00\x3a\x01\x00\x00\x15\x01\xa4\x0e\x00\x00\x07\x18\x00\x00\x74\x05\x00\x00\xe1\x17\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x05\xa4\x0e\xe5\x04\x00\x00\x80\x09\x40\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x05\x00\x00\x00\x00\x00\x00\xfc\x02\x00\x00\x00\x00\x00\x00\x70\x05\x1c\x02\x17\x12\x00\x00\x00\x00\x00\x00\x19\x05\x5b\x05\xdc\x0d\x00\x00\x65\x05\x55\x05\x95\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x12\x10\x05\x00\x00\x00\x00\x00\x00\x25\x05\x00\x00\xdc\x0d\x53\x05\x50\x05\x18\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x05\x00\x00\x00\x00\x00\x00\x52\x05\x00\x00\x00\x00\x41\x05\x14\x09\x4a\x05\x18\x01\x00\x00\x00\x00\xdc\x0d\x4c\x0c\x00\x00\x00\x00\x4c\x05\x00\x00\x00\x00\x48\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x11\x1c\x02\xb0\x17\xc7\x06\x00\x00\xd8\x07\x44\x05\x18\x01\x00\x00\x00\x00\x00\x00\x00\x00\x53\x13\x00\x00\x2f\x05\xdc\x0d\x2f\x05\x1b\x05\x1c\x05\xe8\x0b\x1c\x05\x00\x00\x95\x13\x00\x00\x00\x00\xdc\x0d\x00\x00\xe2\x0a\x31\x16\x29\x05\x00\x00\x00\x00\xcf\x0b\x04\x01\x31\x05\x11\x05\x29\x15\x95\x13\x00\x00\x00\x00\x0d\x05\xee\x04\x18\x01\x05\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x98\x03\x00\x00\x17\x05\x00\x00\x00\x00\x00\x00\x00\x00\x12\x03\x00\x00\x5f\x04\x67\x09\xf1\x04\x00\x00\x00\x00\x95\x13\x97\x08\x95\x13\x00\x00\x00\x00\x00\x00\x00\x00\x60\x11\x00\x00\xdc\x0d\x00\x00\x0e\x0a\xd4\x04\xf8\x12\xde\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x0b\xd3\x04\xd5\x04\x00\x00\x00\x00\x00\x00\xd1\x04\xcb\x04\xdc\x16\x00\x00\x95\x13\x10\x0b\xca\x04\xac\x0a\x00\x00\x00\x00\xb2\x04\x2a\x01\x00\x00\x7f\x14\xbe\x04\xb7\x17\x00\x00\xdc\x16\x59\x17\x44\x08\xb6\x04\x00\x00\x58\x04\x9b\x04\x00\x00\x98\x04\xdc\x0d\x00\x00\x00\x00\xb9\x16\x00\x00\x00\x00\x95\x13\x00\x00\x45\x00\x41\x00\x00\x00\x00\x00\x00\x00\x95\x04\x54\x02\xaa\x02\x92\x04\x00\x00\x15\x01\x5d\x04\x00\x00\x62\x16\x00\x00\x6e\x15\x07\x16\x00\x00\x78\x0d\x00\x00\x00\x00\x00\x00\x7d\x04\x7b\x04\x7b\x04\x00\x00\x00\x00\xcc\x02\x00\x00\x74\x04\x29\x04\x0f\x04\x62\x16\x00\x00\x55\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x16\x42\x03\x00\x00\x00\x00\x95\x13\x00\x00\x00\x00\x00\x00\x00\x00\x14\x0d\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyGotoOffsets :: HappyAddr +happyGotoOffsets = HappyA# "\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x08\x00\x00\x00\x06\x00\x00\x00\xc8\x04\x8f\x04\xa5\x04\xb4\x03\xff\x04\x00\x00\x00\x00\xe2\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xa1\x03\xaf\x03\x03\x00\x00\x00\x00\x00\x00\x00\xfd\x04\x00\x00\x00\x00\x00\x00\xfb\x04\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x00\x00\x00\x00\xcc\x03\x93\x1a\x00\x00\x00\x00\x07\x00\x00\x00\x3c\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\x4d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x03\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x17\xa6\x1b\x00\x00\x2d\x22\x57\x19\x00\x00\xa3\x20\x5d\x20\x05\x21\x2a\x03\x81\x03\x41\x20\x00\x00\x03\x04\x15\x03\x00\x00\xce\x12\x00\x00\x11\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x19\xfb\x1f\x22\x01\xd4\x07\x16\x06\x00\x00\xdf\x1f\xf0\x02\x00\x00\x00\x00\x00\x00\x90\x00\xeb\x03\x00\x00\x00\x00\x00\x00\xdb\x02\xa7\xff\x00\x00\x04\x04\x36\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x00\x00\xfc\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\x3f\x03\x99\x03\x94\x03\xe3\x03\x00\x00\x60\x1b\x1a\x1b\x00\x00\x00\x00\xfc\x03\xa2\x03\x00\x00\x00\x00\xbd\x03\x45\x03\x00\x00\x00\x00\xc0\x02\x47\x00\xab\x02\xae\x03\x00\x00\x00\x00\x00\x00\xf7\x0a\x00\x00\x2e\x03\x03\x01\x99\x1f\x31\x00\xac\x03\x76\x03\x00\x00\x00\x00\x00\x00\x85\x02\x00\x00\x00\x00\x00\x00\x00\x00\x57\x01\x00\x00\x00\x00\x11\x22\xef\x21\xd3\x21\x00\x00\x6d\x03\x22\x00\x00\x00\x00\x00\x00\x00\x73\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x03\x00\x00\x00\x00\x7d\x1f\x00\x00\x00\x00\x00\x00\x1e\x02\x96\x02\x92\x02\x71\x02\x5e\x00\x00\x00\x00\x00\x27\x00\x00\x00\x00\x00\xf7\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x03\x00\x00\x7b\x19\x00\x00\x00\x00\x3b\x19\x88\x04\x41\x03\x00\x00\xb1\x21\x8f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x00\x00\x00\xfb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\xf9\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x1f\x00\x00\x00\x00\x57\x21\xb8\x02\x6f\x00\x00\x00\x1b\x1f\xc5\x1b\xd5\x1e\x00\x00\xb9\x1e\x73\x1e\xf5\x18\xfb\x1a\x00\x00\x00\x00\x00\x00\x57\x21\x00\x00\x00\x00\xaf\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x02\x52\x02\xf1\x02\x00\x00\xaf\x04\x29\x00\x00\x00\x00\x00\xb0\x02\x00\x00\x00\x00\xaf\x18\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x03\x00\x00\x00\x00\x37\x00\x00\x00\x00\x00\x65\x00\x2f\x00\x00\x00\x00\x00\x67\x00\x58\x00\x4d\x1a\x66\x00\xa9\x02\x43\x02\xad\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x02\xde\xff\xdc\x03\x7f\x03\x00\x00\x1b\x02\x00\x00\xc2\x03\x00\x00\xba\x03\x00\x00\x00\x00\x31\x04\xab\x03\x00\x00\x5f\x09\x0a\x02\x00\x00\xb5\x1a\xf7\xff\xf4\x01\x00\x00\x40\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x02\x00\x00\x00\x00\x00\x00\x8a\x04\x00\x00\x74\x03\x00\x00\x00\x00\x41\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x1a\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x01\x2a\x02\x14\x04\xb3\x01\x5f\x03\x00\x00\x00\x00\xa8\x01\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\xbf\x00\x81\x00\x95\x21\x00\x00\x00\x00\x77\x01\x00\x00\xb1\x01\x57\x1e\x11\x1e\x15\x00\x00\x00\x00\x00\xa3\x01\x76\x01\xf5\x1d\x00\x00\x00\x00\x00\x00\x3d\x00\x72\x01\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x01\xf2\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\x00\x00\x00\x00\x4c\x04\x00\x00\x00\x00\xe8\xff\x00\x00\x50\x02\x6b\x01\x00\x00\x00\x00\x00\x00\x42\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x19\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x03\xaf\x1d\x00\x00\x48\x02\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x18\x00\x00\x00\x00\x93\x1d\x29\x1a\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\x00\x00\x00\x00\x00\x00\x87\x01\x00\x00\x23\x02\x83\x01\x00\x00\x08\x04\x25\x04\xfd\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x4d\x1d\x00\x00\x00\x00\x00\x00\x79\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x04\x00\x00\x06\x04\x00\x00\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x31\x1d\x74\x00\x00\x00\xed\x00\x00\x00\x36\x01\x25\x00\x9d\x01\x00\x00\x55\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x01\x00\x00\xba\x00\x00\x00\x00\x00\xeb\x1c\xe3\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x03\x00\x00\x00\x00\x00\x00\x28\x01\x6f\x03\x1c\x00\xa8\x01\x00\x00\xf4\xff\x00\x00\xa2\x00\x00\x00\x00\x00\x92\x03\x00\x00\x24\x21\x00\x00\x00\x00\xcf\x1c\x00\x00\x9f\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x58\x01\x00\x00\x00\x00\x89\x1c\x00\x00\xde\xff\x54\x04\x00\x00\x00\x00\x00\x00\x13\x04\xe9\x01\x00\x00\x00\x00\x49\x01\x3f\x04\x00\x00\x00\x00\xeb\xff\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x00\x00\x00\x15\x02\x00\x00\x00\x00\x70\x03\x00\x00\x8f\x02\x00\x00\x71\x01\xa3\x03\x83\x00\x00\x00\x00\x00\x1c\x04\x46\x04\xd7\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x6d\x1c\x00\x00\xf6\x04\xc7\x01\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x03\x00\x00\x00\x00\xc0\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x02\x00\x00\x0b\x01\x71\x00\x00\x00\x9d\x19\x00\x00\x00\x00\x00\x00\x05\x02\x00\x00\x4c\x00\x00\x00\xf3\xff\x00\x00\xf2\x01\x5a\x03\x28\x00\x00\x00\x00\x00\xbe\x00\xa4\xff\x00\x00\x00\x00\x27\x1c\x00\x00\x00\x00\x56\x02\x00\x00\x00\x00\x56\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\xd0\xff\x00\x00\x00\x00\x99\x02\x00\x00\x00\x00\xdd\x01\x00\x00\x87\x02\x73\x01\x00\x00\x4a\x18\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x00\xd2\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xff\x00\x00\xc6\x01\x00\x00\xe1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x01\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x1c\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyDefActions :: HappyAddr +happyDefActions = HappyA# "\x4b\xfe\x00\x00\xfe\xff\x00\x00\x00\x00\xfc\xff\x4a\xfe\x4b\xfe\x00\x00\x4a\xfe\xf8\xff\xef\xff\xef\xff\x00\x00\x00\x00\xed\xff\x47\xfe\x46\xfe\xc3\xfe\xca\xfe\xc9\xfe\xc8\xfe\xc7\xfe\xc5\xfe\xc6\xfe\x00\x00\xf0\xff\xf2\xff\x00\x00\x4b\xfe\x4b\xfe\xf6\xff\x48\xfe\x49\xfe\xef\xff\xdf\xff\xa3\xff\xf4\xff\xef\xff\xbe\xff\xae\xff\xa4\xff\xa2\xff\x4b\xfe\xf1\xff\xf7\xff\x00\x00\x4b\xfe\x00\x00\xee\xff\xe9\xff\x00\x00\xe9\xff\xe7\xff\xe6\xff\x8b\xfe\x69\xfe\x72\xfe\x44\xfe\x63\xfe\xe5\xff\x70\xfe\x71\xfe\x61\xfe\x62\xfe\x00\x00\xea\xff\x6c\xfe\x68\xfe\x67\xfe\x66\xfe\x6b\xfe\x6a\xfe\x6f\xfe\x6d\xfe\x00\x00\x6e\xfe\x4a\xfe\xc1\xfe\x01\xff\xf8\xfe\xea\xfe\x00\x00\xc4\xfe\x00\x00\xf5\xfe\xf6\xfe\xf7\xfe\x90\xfe\x89\xfe\x86\xfe\xf4\xfe\x00\x00\x70\xfe\x65\xfe\x64\xfe\x61\xfe\x4f\xfe\x4d\xfe\x4e\xfe\x4c\xfe\x4b\xfe\x4b\xfe\xee\xfe\x4b\xfe\x4b\xfe\xe9\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4a\xfe\x4b\xfe\xcb\xfe\xc7\xff\x00\x00\x00\x00\x4b\xfe\x14\xff\x0a\xff\x08\xff\x0b\xff\x15\xff\xf6\xfe\xbf\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\xad\xff\x00\x00\x00\x00\x4a\xfe\xdc\xff\xc5\xff\xc4\xff\xc3\xff\x00\x00\x4a\xfe\xac\xff\x00\x00\xf0\xff\xc0\xff\xf0\xff\xf3\xff\xfd\xff\xe0\xff\xf5\xff\xbf\xff\x4b\xfe\x00\x00\x91\xff\x8a\xff\x89\xff\x42\xfe\x82\xff\x88\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xff\x4b\xfe\x4b\xfe\x8c\xff\x7a\xff\x91\xff\x2f\xff\x00\x00\x00\x00\x74\xff\x00\x00\xdd\xff\x0d\xff\x00\x00\xa9\xff\x00\x00\x6f\xff\x00\x00\x1b\xff\x1a\xff\x19\xff\x17\xff\x4b\xfe\x4a\xfe\x4b\xfe\x4a\xfe\x00\x00\x00\x00\xe0\xfe\xde\xfe\xdf\xfe\x00\x00\x00\x00\xe1\xfe\xe3\xfe\xe2\xfe\x00\x00\x00\x00\x00\x00\x0e\xff\x4b\xfe\x4b\xfe\x09\xff\x23\xff\x21\xff\x1f\xff\x78\xfe\x77\xfe\x4b\xfe\x7c\xfe\x73\xfe\x60\xfe\x82\xfe\x5d\xfe\x5c\xfe\x00\x00\x59\xfe\x5e\xfe\x50\xfe\x5f\xfe\x00\x00\x56\xfe\x74\xfe\x4b\xfe\x58\xfe\x57\xfe\x55\xfe\x00\x00\x00\x00\x64\xff\x00\x00\x00\x00\xc6\xff\x00\x00\x4b\xfe\x00\x00\x00\x00\x19\xff\x00\x00\x00\x00\xd6\xfe\x00\x00\xd8\xfe\xd7\xfe\x02\xff\xbe\xfe\x00\x00\xbd\xfe\x92\xfe\x00\x00\x19\xff\x00\x00\x00\x00\x00\x00\x76\xfe\x75\xfe\x4b\xfe\x7c\xfe\x00\x00\x80\xfe\x5b\xfe\x5a\xfe\x54\xfe\x93\xfe\xdc\xfe\x00\x00\x52\xfe\x58\xfe\x53\xfe\x51\xfe\x4b\xfe\x00\x00\xcf\xfe\xfa\xff\x4b\xfe\x00\x00\xfe\xfe\xfd\xfe\xfc\xfe\xfb\xfe\xfa\xfe\xf9\xfe\xf9\xff\xe1\xff\x00\x00\x00\x00\xea\xff\xeb\xff\xe8\xff\xec\xff\x00\x00\xcb\xff\xca\xff\xc9\xff\x8f\xfe\x88\xfe\x00\x00\xe3\xff\x00\x00\x00\x00\x9b\xfe\x00\x00\x00\xff\xc2\xfe\x4b\xfe\xc3\xfe\x00\x00\x00\x00\x00\x00\x8a\xfe\x85\xfe\x00\x00\xed\xfe\xf2\xfe\x4b\xfe\x91\xfe\xdd\xfe\x4b\xfe\x4b\xfe\x4a\xfe\xf3\xfe\x4b\xfe\x4b\xfe\x4b\xfe\xf1\xfe\x4b\xfe\xbc\xfe\x4b\xfe\x4b\xfe\xec\xfe\xe8\xfe\xe7\xfe\x4b\xfe\xe6\xfe\xe5\xfe\x00\x00\xd1\xfe\xc8\xff\x7a\xfe\x79\xfe\xc1\xff\x7e\xfe\x84\xfe\x00\x00\x64\xff\x4b\xff\x00\x00\x00\x00\x4b\xfe\x9f\xff\x9b\xff\x00\x00\x22\xff\x00\x00\x4b\xfe\x16\xff\x20\xff\x25\xff\x4a\xfe\x03\xff\x04\xff\xb1\xff\x7f\xff\x00\x00\x81\xff\x00\x00\x00\x00\x94\xff\x99\xff\x98\xff\x00\x00\x9e\xff\x00\x00\xef\xff\xef\xff\x00\x00\x00\x00\xef\xff\xef\xff\x4b\xfe\x4a\xfe\x3d\xff\x70\xff\x40\xff\x00\x00\xaa\xff\xab\xff\x00\x00\xb3\xff\xda\xff\x00\x00\x00\x00\x00\x00\xb4\xff\x4a\xfe\x8b\xff\x00\x00\x7d\xff\x00\x00\x40\xfe\x3f\xfe\x00\x00\x00\x00\x9d\xfe\x19\xff\x4b\xfe\x00\x00\x4b\xfe\x4a\xfe\x00\x00\x00\x00\x40\xff\x00\x00\x77\xff\x00\x00\x7a\xff\x00\x00\x00\x00\x00\x00\xbd\xff\x87\xff\x84\xff\x00\x00\x86\xff\x00\x00\x85\xff\xbc\xff\x00\x00\xa3\xfe\x00\x00\x9f\xfe\xa4\xfe\x00\x00\x9e\xfe\x8e\xff\x00\x00\x8f\xff\x90\xff\xef\xff\xef\xff\x7b\xff\x8d\xff\x75\xff\x73\xff\x00\x00\x00\x00\xd8\xff\x00\x00\x00\x00\xb2\xff\xb8\xff\x00\x00\x6e\xff\x6c\xff\xb5\xff\x4a\xfe\x0f\xff\xef\xff\xef\xff\x4b\xfe\x06\xff\x05\xff\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x4b\xfe\xa7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\xaf\xff\x00\x00\x8d\xfe\x00\x00\x00\x00\x00\x00\x97\xff\x96\xff\x95\xff\x80\xff\x7e\xff\x24\xff\xb2\xfe\x00\x00\xb4\xfe\x4b\xfe\x4a\xfe\x81\xfe\x00\x00\x63\xff\x61\xff\x5d\xff\x3f\xff\x45\xff\x00\x00\x42\xff\x43\xff\x4a\xfe\xba\xff\x00\x00\x4b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\xff\xd9\xfe\xb8\xfe\xba\xfe\xb6\xfe\xb7\xfe\xd4\xfe\xd5\xfe\xda\xfe\x1c\xff\x00\x00\xf0\xfe\xdb\xfe\xef\xfe\x7b\xfe\x7f\xfe\xeb\xfe\x4b\xfe\xcc\xfe\xd0\xfe\x00\x00\xce\xfe\x00\x00\x4b\xfe\xff\xfe\x00\x00\xe4\xff\x00\x00\xe2\xff\x00\x00\xcc\xff\x87\xfe\x9c\xfe\x9a\xfe\x00\x00\x4b\xfe\x00\x00\x1d\xff\xbb\xfe\x4b\xfe\xe4\xfe\xc2\xff\x7d\xfe\x83\xfe\x4a\xfe\xb7\xff\x43\xfe\x4a\xff\x00\x00\xb9\xff\xef\xff\xef\xff\x00\x00\x00\x00\x00\x00\x74\xff\x4b\xfe\x8e\xfe\xb1\xfe\x00\x00\x4b\xfe\xb0\xff\x00\x00\x00\x00\x00\x00\x12\xff\x9c\xff\xa0\xff\x9d\xff\xa1\xff\xef\xff\xa5\xff\xef\xff\x95\xfe\x4b\xfe\x00\x00\x11\xff\x98\xfe\x99\xfe\x00\x00\x07\xff\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x3e\xff\xef\xff\xef\xff\x70\xff\x71\xff\x70\xff\x78\xff\xdb\xff\xde\xff\xd9\xff\x00\x00\xd5\xff\x7c\xff\x00\x00\x2d\xff\x00\x00\x00\x00\x41\xfe\xa0\xfe\x4b\xfe\x4b\xfe\xbb\xff\x76\xff\x00\x00\x83\xff\xa2\xfe\x00\x00\x30\xff\x31\xff\xef\xff\x2b\xff\x29\xff\x2a\xff\x4b\xfe\x00\x00\xe9\xff\x6b\xff\x6d\xff\x39\xff\x00\x00\x00\x00\xaf\xfe\xb0\xfe\xef\xff\xac\xfe\x4b\xfe\x13\xff\x00\x00\x4b\xfe\xf7\xfe\xf0\xff\x97\xfe\xf0\xff\xa8\xff\x92\xff\x00\x00\x8c\xfe\x1e\xff\x4b\xfe\x62\xff\x00\x00\x58\xff\x00\x00\x5f\xff\x5c\xff\x57\xff\x00\x00\x00\x00\x63\xfe\x00\x00\x00\x00\x44\xff\x41\xff\x4b\xfe\x00\x00\x00\x00\x00\x00\x46\xff\x49\xff\xb6\xff\xb5\xfe\xb9\xfe\xcf\xfe\xd2\xfe\x00\x00\xfb\xff\xcd\xfe\x4b\xfe\x48\xff\x00\x00\x69\xff\x6a\xff\xef\xff\x66\xff\x00\x00\x51\xff\x00\x00\x00\x00\x00\x00\x54\xff\x55\xff\x00\x00\x00\x00\x00\x00\x5e\xff\xb3\xfe\x93\xff\xa6\xff\x4b\xfe\x96\xfe\x4b\xfe\x10\xff\xa5\xfe\x4b\xfe\xf0\xff\xae\xfe\x3b\xff\x3c\xff\x36\xff\xef\xff\x37\xff\x35\xff\x4b\xfe\x00\x00\xe9\xff\xd2\xff\xd1\xff\x45\xfe\xd0\xff\x00\x00\x00\x00\xad\xff\x00\x00\xf0\xff\x2e\xff\x4b\xfe\xa1\xfe\x2c\xff\x00\x00\x64\xff\x72\xff\x00\x00\x00\x00\xea\xff\xd6\xff\x00\x00\x00\x00\xf0\xff\x3a\xff\xad\xfe\x23\xff\xa9\xfe\xa7\xfe\x00\x00\x4b\xfe\x94\xfe\x56\xff\x58\xff\x60\xff\x53\xff\x52\xff\x5b\xff\x00\x00\x00\x00\x4f\xff\x9a\xff\x5a\xff\x00\x00\x00\x00\xf0\xff\x68\xff\x47\xff\x00\x00\x00\x00\x67\xff\x00\x00\x59\xff\x00\x00\x00\x00\xaa\xfe\x4b\xfe\xa8\xfe\xab\xfe\x38\xff\x8c\xff\x40\xff\x40\xff\xd3\xff\xd7\xff\x00\x00\xce\xff\x00\x00\x4b\xff\x00\x00\x00\x00\x28\xff\x4a\xfe\x27\xff\xcf\xff\xcd\xff\x32\xff\x34\xff\x00\x00\x00\x00\x4d\xff\x4e\xff\x00\x00\x50\xff\x65\xff\xd3\xfe\x4c\xff\x4b\xfe\x33\xff\x26\xff\xa6\xfe"# + +happyCheck :: HappyAddr +happyCheck = HappyA# "\xff\xff\x00\x00\x01\x00\x02\x00\x01\x00\x01\x00\x0b\x00\x14\x00\x03\x00\x03\x00\x02\x00\x17\x00\x03\x00\x3d\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x35\x00\x4a\x00\x23\x00\x22\x00\x25\x00\x24\x00\x17\x00\x23\x00\x3a\x00\x25\x00\x1b\x00\x1c\x00\x1d\x00\x4e\x00\x3a\x00\x3a\x00\x0d\x00\x22\x00\x09\x00\x24\x00\x3c\x00\x3d\x00\x85\x00\x05\x00\x06\x00\x17\x00\x17\x00\x87\x00\x13\x00\x14\x00\x1b\x00\x1c\x00\x1d\x00\x05\x00\x06\x00\x21\x00\x22\x00\x22\x00\x24\x00\x24\x00\x23\x00\x40\x00\x25\x00\x17\x00\x17\x00\x05\x00\x06\x00\x1b\x00\x1c\x00\x1d\x00\x17\x00\x52\x00\x53\x00\x54\x00\x22\x00\x22\x00\x24\x00\x24\x00\x17\x00\x5a\x00\x20\x00\x22\x00\xad\x00\x24\x00\x1d\x00\x23\x00\xae\x00\x25\x00\x16\x00\x22\x00\x29\x00\x24\x00\x1a\x00\x5a\x00\x05\x00\x06\x00\x1a\x00\x29\x00\x15\x00\x16\x00\x15\x00\x16\x00\x20\x00\x1f\x00\x10\x00\x3f\x00\x40\x00\x05\x00\x06\x00\x05\x00\x06\x00\x50\x00\x5a\x00\x5a\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x51\x00\x1a\x00\x1a\x00\x32\x00\x33\x00\x53\x00\x54\x00\xad\x00\xa0\x00\xa1\x00\x5e\x00\x5a\x00\x5a\x00\x90\x00\x16\x00\x20\x00\x05\x00\x06\x00\x5a\x00\x2d\x00\x2e\x00\x09\x00\x2f\x00\x92\x00\x14\x00\xae\x00\x5a\x00\x56\x00\xb4\x00\xa0\x00\xa1\x00\xae\x00\xae\x00\xa4\x00\xad\x00\x92\x00\x9f\x00\xa0\x00\xa1\x00\x4e\x00\xa3\x00\xa4\x00\xae\x00\xad\x00\x8d\x00\x8e\x00\xb1\x00\xae\x00\x9f\x00\xa0\x00\xa1\x00\xad\x00\xa3\x00\xa4\x00\x90\x00\xb2\x00\xad\x00\xad\x00\xad\x00\xad\x00\x5b\x00\xae\x00\xae\x00\xad\x00\x82\x00\xae\x00\x15\x00\xb2\x00\x19\x00\x8c\x00\xa0\x00\xa1\x00\x1a\x00\x1e\x00\xa4\x00\x91\x00\xad\x00\xad\x00\x05\x00\x06\x00\xae\x00\x26\x00\x91\x00\x58\x00\x59\x00\x5a\x00\xae\x00\xb1\x00\x91\x00\xad\x00\xa0\x00\x2d\x00\x05\x00\x06\x00\xad\x00\xad\x00\xad\x00\xa0\x00\x5e\x00\x19\x00\x93\x00\xad\x00\x90\x00\xa0\x00\x90\x00\xae\x00\x94\x00\xad\x00\x94\x00\xad\x00\x8c\x00\x7f\x00\x26\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa0\x00\xa1\x00\xa0\x00\xa1\x00\xa4\x00\x8c\x00\xa4\x00\x8c\x00\x96\x00\x81\x00\x82\x00\x99\x00\x15\x00\x9b\x00\x8b\x00\xb4\x00\xa0\x00\xa1\x00\x90\x00\xa3\x00\xa4\x00\x80\x00\x94\x00\x62\x00\xa6\x00\x64\x00\x65\x00\xa9\x00\x65\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x09\x00\xa0\x00\xa1\x00\xb4\x00\x16\x00\xa4\x00\x72\x00\xae\x00\x1a\x00\x01\x00\x87\x00\x00\x00\x5b\x00\x05\x00\x7a\x00\x07\x00\xae\x00\xad\x00\x19\x00\x1c\x00\xad\x00\x62\x00\x56\x00\x64\x00\x65\x00\x43\x00\xa4\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x26\x00\x8e\x00\x93\x00\x17\x00\x8f\x00\x34\x00\x72\x00\x92\x00\x93\x00\x2a\x00\x95\x00\x2c\x00\x2d\x00\x2e\x00\x7a\x00\x05\x00\x06\x00\xa2\x00\xae\x00\x80\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x1e\x00\x73\x00\x65\x00\xaf\x00\x20\x00\x21\x00\xad\x00\xac\x00\xad\x00\x8f\x00\x2e\x00\xaf\x00\x92\x00\x93\x00\x72\x00\x95\x00\x74\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\x30\x00\x31\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x1a\x00\x2c\x00\x52\x00\x62\x00\xaf\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x26\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x72\x00\x30\x00\x31\x00\x32\x00\x33\x00\x43\x00\x69\x00\x00\x00\x7a\x00\x36\x00\x2a\x00\x37\x00\x2c\x00\x2d\x00\x2e\x00\x51\x00\x05\x00\x06\x00\x62\x00\x36\x00\x64\x00\x65\x00\x8b\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6a\x00\x8f\x00\x17\x00\x26\x00\x92\x00\x93\x00\x72\x00\x95\x00\xaf\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x7a\x00\x30\x00\x31\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa0\x00\xa1\x00\xa6\x00\xa3\x00\xa4\x00\xa9\x00\xae\x00\xac\x00\xad\x00\x92\x00\x4a\x00\x6d\x00\x8f\x00\x47\x00\x48\x00\x92\x00\x93\x00\x49\x00\x95\x00\x3b\x00\xb4\x00\x93\x00\x9f\x00\xa0\x00\xa1\x00\x6d\x00\xa3\x00\xa4\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x4b\x00\x36\x00\xac\x00\xad\x00\x39\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\x30\x00\x31\x00\x32\x00\x33\x00\xb4\x00\x1a\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x1a\x00\x20\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x26\x00\xa6\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x41\x00\x30\x00\x31\x00\xa0\x00\xa1\x00\x2d\x00\xa3\x00\xa4\x00\xb4\x00\xa7\x00\x37\x00\xa9\x00\xad\x00\xab\x00\x92\x00\x8d\x00\x8e\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xb4\x00\x30\x00\x31\x00\x2c\x00\x9f\x00\xa0\x00\xa1\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x89\x00\x8a\x00\x6d\x00\xa9\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x92\x00\x30\x00\x31\x00\xad\x00\xaf\x00\x43\x00\xb4\x00\x05\x00\x06\x00\xa3\x00\xa4\x00\x10\x00\x00\x00\x9f\x00\xa0\x00\xa1\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\x30\x00\x31\x00\xad\x00\xb3\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\x30\x00\x31\x00\x3e\x00\x17\x00\x20\x00\x2a\x00\x2b\x00\xa0\x00\xa1\x00\x83\x00\x84\x00\x85\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xaf\x00\x4e\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\x30\x00\x31\x00\xb4\x00\x09\x00\x3b\x00\x0b\x00\xaf\x00\xb4\x00\x4a\x00\xb0\x00\xa0\x00\xa1\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\x30\x00\x31\x00\x1f\x00\xad\x00\x5d\x00\x08\x00\x09\x00\xb4\x00\x36\x00\xb4\x00\x38\x00\x39\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x99\x00\x2d\x00\x2e\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1d\x00\x30\x00\x31\x00\x4e\x00\xa6\x00\x3e\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x29\x00\x2a\x00\x2b\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x4e\x00\x30\x00\x31\x00\xaf\x00\x93\x00\x1a\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x21\x00\x26\x00\x90\x00\x05\x00\x06\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x1a\x00\xad\x00\xa3\x00\xa4\x00\x10\x00\xb4\x00\x20\x00\x93\x00\xa0\x00\xa1\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xb4\x00\x30\x00\x31\x00\xb3\x00\xae\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x48\x00\x3e\x00\x1f\x00\x8a\x00\x21\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x92\x00\x30\x00\x31\x00\x11\x00\xb4\x00\x0f\x00\x4e\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x1a\x00\x9f\x00\xa0\x00\xa1\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\x30\x00\x31\x00\x6d\x00\xa3\x00\xa4\x00\xb4\x00\xa0\x00\xa1\x00\x4f\x00\xa3\x00\xa4\x00\x4e\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x05\x00\x06\x00\xb3\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xb4\x00\x30\x00\x31\x00\x11\x00\x75\x00\x76\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x11\x00\x05\x00\x06\x00\x92\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1a\x00\x30\x00\x31\x00\x10\x00\x9e\x00\x95\x00\xb4\x00\x9f\x00\xa0\x00\xa1\x00\x93\x00\xa5\x00\xa6\x00\xa7\x00\x13\x00\xa9\x00\x08\x00\xab\x00\x0a\x00\xa3\x00\xa4\x00\x1a\x00\x28\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x4a\x00\x05\x00\x06\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1d\x00\x30\x00\x31\x00\x10\x00\x05\x00\x06\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x29\x00\x2a\x00\x2b\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xa9\x00\x30\x00\x31\x00\x1a\x00\x11\x00\xaf\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xad\x00\x1a\x00\x25\x00\x11\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\x1a\x00\x77\x00\x1a\x00\x33\x00\x1e\x00\xb4\x00\x05\x00\x06\x00\x11\x00\x23\x00\x08\x00\x9e\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x1a\x00\xa5\x00\xa6\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x1d\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa0\x00\xa1\x00\x05\x00\x06\x00\xa4\x00\x29\x00\x2a\x00\x2b\x00\x27\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2a\x00\xb4\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x9f\x00\xa0\x00\xa1\x00\x11\x00\xa3\x00\xa4\x00\x73\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x1a\x00\x4c\x00\x4d\x00\x93\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x5b\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\x27\x00\x1f\x00\x2a\x00\x21\x00\x2c\x00\x2d\x00\x2e\x00\x42\x00\xad\x00\x44\x00\x45\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x2a\x00\x37\x00\x2c\x00\x2d\x00\x2e\x00\x46\x00\x05\x00\x06\x00\x2a\x00\x93\x00\x2c\x00\x2d\x00\x2e\x00\x34\x00\x93\x00\xb4\x00\xa7\x00\xb0\x00\xa9\x00\x55\x00\xab\x00\x0e\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x2d\x00\x2e\x00\x2a\x00\x93\x00\x2c\x00\x2d\x00\x2e\x00\x05\x00\x06\x00\x2a\x00\xb4\x00\x2c\x00\x2d\x00\x2e\x00\x93\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa0\x00\xa1\x00\x18\x00\xa3\x00\xa4\x00\xb0\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x10\x00\x11\x00\x12\x00\x93\x00\xb4\x00\x2d\x00\x2e\x00\x2f\x00\x93\x00\xb4\x00\x2a\x00\xae\x00\x2c\x00\x2d\x00\x2e\x00\xb4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x05\x00\x06\x00\x2d\x00\x2e\x00\x76\x00\xa0\x00\xa1\x00\x09\x00\xa3\x00\xa4\x00\xb4\x00\x2d\x00\x2e\x00\xa0\x00\xa1\x00\xb4\x00\xa3\x00\xa4\x00\xaf\x00\x2c\x00\x2d\x00\x2e\x00\x4c\x00\x4d\x00\x31\x00\xb4\x00\x45\x00\x77\x00\xa0\x00\xa1\x00\xad\x00\xa3\x00\xa4\x00\xb4\x00\x01\x00\x02\x00\xa0\x00\xa1\x00\xb0\x00\xa3\x00\xa4\x00\x42\x00\x43\x00\x44\x00\x15\x00\x46\x00\x2d\x00\x2e\x00\xb4\x00\x10\x00\x75\x00\x76\x00\x2c\x00\x2d\x00\x2e\x00\x16\x00\xb4\x00\xa0\x00\xa1\x00\x6a\x00\xa3\x00\xa4\x00\xa0\x00\xa1\x00\x55\x00\xa3\x00\xa4\x00\x2d\x00\x2e\x00\xa0\x00\xa1\x00\x11\x00\xa3\x00\xa4\x00\x42\x00\x43\x00\x44\x00\xb4\x00\x46\x00\x9f\x00\xa0\x00\xa1\x00\xb4\x00\xa3\x00\xa4\x00\x04\x00\x05\x00\x06\x00\x9a\x00\xb4\x00\x4c\x00\x4d\x00\x9e\x00\x20\x00\xa0\x00\xa1\x00\x21\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\x46\x00\xa0\x00\xa1\x00\x14\x00\xa3\x00\xa4\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xb4\x00\xb5\x00\xb6\x00\xa0\x00\xa1\x00\x20\x00\xa3\x00\xa4\x00\xb4\x00\x94\x00\x5b\x00\x23\x00\xa0\x00\xa1\x00\x23\x00\xa3\x00\xa4\x00\x42\x00\x6a\x00\x44\x00\x45\x00\xa0\x00\xa1\x00\xb4\x00\xa3\x00\xa4\x00\x14\x00\x6c\x00\x04\x00\x05\x00\x06\x00\x11\x00\xb4\x00\xa0\x00\xa1\x00\x21\x00\xa3\x00\xa4\x00\x4c\x00\x4d\x00\x96\x00\xb4\x00\x94\x00\x99\x00\x11\x00\x9b\x00\x14\x00\xa0\x00\xa1\x00\x10\x00\xa3\x00\xa4\x00\x11\x00\xb4\x00\xa0\x00\xa1\x00\xa6\x00\xa3\x00\xa4\x00\xa9\x00\x4b\x00\x4c\x00\x4d\x00\x1a\x00\x01\x00\x02\x00\x14\x00\xb4\x00\xa0\x00\xa1\x00\x05\x00\xa3\x00\xa4\x00\x25\x00\xb4\x00\x4c\x00\x4d\x00\x75\x00\x76\x00\x10\x00\x05\x00\x06\x00\x05\x00\x06\x00\x16\x00\x16\x00\x07\x00\x08\x00\xb4\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\x75\x00\x76\x00\x05\x00\x06\x00\x03\x00\x04\x00\x18\x00\x14\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x15\x00\x1f\x00\x03\x00\x04\x00\x22\x00\x46\x00\x47\x00\x05\x00\x06\x00\x27\x00\x14\x00\x29\x00\x2a\x00\x2b\x00\x4e\x00\x4f\x00\x2e\x00\x05\x00\x06\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x5b\x00\x46\x00\x47\x00\x45\x00\x05\x00\x06\x00\x21\x00\x28\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x16\x00\x6c\x00\x14\x00\x11\x00\x56\x00\x57\x00\x16\x00\x20\x00\x10\x00\x5b\x00\x5c\x00\x1a\x00\x16\x00\x14\x00\x58\x00\x08\x00\x09\x00\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\x20\x00\x11\x00\x5e\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x1c\x00\x1d\x00\x24\x00\x14\x00\x11\x00\x15\x00\x46\x00\x18\x00\x11\x00\x1e\x00\x1b\x00\x1a\x00\x6a\x00\x29\x00\x2a\x00\x2b\x00\x97\x00\x36\x00\x3e\x00\x9a\x00\x1c\x00\x9c\x00\x27\x00\x9e\x00\x29\x00\x1c\x00\x55\x00\x2c\x00\x15\x00\x2e\x00\xa5\x00\xa6\x00\xa7\x00\x25\x00\xa9\x00\x01\x00\xab\x00\x23\x00\x11\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x5a\x00\x43\x00\x20\x00\x45\x00\x16\x00\x16\x00\x16\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\x14\x00\x57\x00\x25\x00\x15\x00\x1a\x00\x5b\x00\x24\x00\x5d\x00\x11\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x1c\x00\x64\x00\x1a\x00\x66\x00\x19\x00\x20\x00\x69\x00\x21\x00\x15\x00\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x16\x00\x14\x00\x1a\x00\x15\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x18\x00\x50\x00\x11\x00\x1b\x00\x1a\x00\x20\x00\x6a\x00\x15\x00\x5e\x00\x68\x00\x5b\x00\x11\x00\x11\x00\x15\x00\x5e\x00\x27\x00\x1c\x00\x29\x00\x6a\x00\x1a\x00\x2c\x00\x15\x00\x2e\x00\x55\x00\x11\x00\x1c\x00\x1c\x00\x6c\x00\x11\x00\x21\x00\x11\x00\x11\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x11\x00\x3f\x00\x40\x00\x41\x00\x11\x00\x43\x00\x11\x00\x45\x00\x11\x00\x11\x00\x11\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\x11\x00\x57\x00\x36\x00\x1a\x00\x19\x00\x5b\x00\x11\x00\x5d\x00\x3e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x48\x00\x64\x00\x3e\x00\x66\x00\x3e\x00\x6a\x00\x69\x00\x23\x00\x23\x00\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x11\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x19\x00\x19\x00\x15\x00\x15\x00\x15\x00\x23\x00\x67\x00\x18\x00\x28\x00\x20\x00\x1b\x00\x1c\x00\x1d\x00\x21\x00\x1f\x00\x14\x00\x21\x00\x6a\x00\x23\x00\x15\x00\x15\x00\x62\x00\x27\x00\x6c\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x10\x00\x2e\x00\x59\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x0c\x00\x21\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x6c\x00\x10\x00\x15\x00\x1a\x00\x11\x00\x43\x00\x6a\x00\x45\x00\x16\x00\x1f\x00\x10\x00\x48\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6d\x00\x45\x00\x43\x00\x5b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x8f\x00\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x95\x00\x18\x00\xff\xff\xff\xff\x1b\x00\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xff\xff\xa3\x00\xa4\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\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\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\x62\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\x01\x00\x02\x00\x45\x00\xff\xff\x05\x00\x06\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\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\x5d\x00\xff\xff\x5f\x00\x60\x00\x61\x00\x62\x00\x15\x00\x64\x00\xff\xff\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x6c\x00\x01\x00\xff\xff\x45\x00\xff\xff\x05\x00\x06\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\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\x62\x00\xff\xff\x64\x00\xff\xff\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\x01\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\x0f\x00\x10\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x6c\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x53\x00\x4a\x00\xff\xff\xff\xff\x57\x00\x4e\x00\x4f\x00\x50\x00\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\xff\xff\xff\xff\x64\x00\x5b\x00\xff\xff\xff\xff\x6c\x00\x69\x00\xff\xff\xff\xff\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\x6c\x00\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\xff\xff\xff\xff\x95\x00\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\x9f\x00\xa0\x00\xa1\x00\xff\xff\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x53\x00\x01\x00\xff\xff\xff\xff\x57\x00\x05\x00\x06\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\xff\xff\x10\x00\x64\x00\x12\x00\xff\xff\xff\xff\xff\xff\x69\x00\xff\xff\x18\x00\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x2a\x00\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x5b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x6c\x00\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\x08\x00\x14\x00\x0a\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\xff\xff\x27\x00\x1d\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x53\x00\x01\x00\xff\xff\xff\xff\x57\x00\x05\x00\x06\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x64\x00\x12\x00\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\x18\x00\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x5b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x6c\x00\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\x97\x00\xff\xff\x14\x00\x9a\x00\xff\xff\x9c\x00\x18\x00\x9e\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xa5\x00\xa6\x00\xa7\x00\xff\xff\xa9\x00\xff\xff\xab\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\x1c\x00\x1d\x00\xff\xff\x1f\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\xff\xff\xff\xff\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x11\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x27\x00\x1f\x00\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x97\x00\x22\x00\xff\xff\x9a\x00\xff\xff\x9c\x00\x27\x00\x9e\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xa5\x00\xa6\x00\xa7\x00\xff\xff\xa9\x00\xff\xff\xab\x00\xff\xff\x01\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\x10\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x1d\x00\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\x01\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x10\x00\x1b\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\x1c\x00\x1d\x00\x27\x00\x1f\x00\x29\x00\x21\x00\xff\xff\x2c\x00\x5b\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x6c\x00\x3f\x00\x40\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x53\x00\x4a\x00\xff\xff\xff\xff\x57\x00\x4e\x00\x4f\x00\x50\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\x00\x5b\x00\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\xff\xff\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\x6c\x00\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\x97\x00\xff\xff\xff\xff\x9a\x00\xff\xff\x9c\x00\x18\x00\x9e\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xa5\x00\xa6\x00\xa7\x00\xff\xff\xa9\x00\xff\xff\xab\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x53\x00\x01\x00\xff\xff\xff\xff\x57\x00\x05\x00\x06\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\xff\xff\x10\x00\x64\x00\x12\x00\xff\xff\xff\xff\xff\xff\x69\x00\xff\xff\x18\x00\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\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\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x2c\x00\xff\xff\x2e\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x5b\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\xff\xff\xff\xff\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\x10\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x1d\x00\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x01\x00\x5b\x00\x2e\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x6c\x00\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\xff\xff\xff\xff\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x53\x00\x01\x00\xff\xff\xff\xff\x57\x00\x05\x00\x06\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x64\x00\x12\x00\x66\x00\xff\xff\xff\xff\x69\x00\xff\xff\x18\x00\x6c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\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\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x5b\x00\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\xff\xff\xff\xff\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\xff\xff\xff\xff\x45\x00\x10\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\x2c\x00\x5b\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x6c\x00\x3f\x00\x40\x00\x41\x00\xff\xff\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x64\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6c\x00\x97\x00\xff\xff\xff\xff\x9a\x00\xff\xff\x9c\x00\x18\x00\x9e\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xa5\x00\xa6\x00\xa7\x00\xff\xff\xa9\x00\xff\xff\xab\x00\x27\x00\xad\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\xff\xff\x01\x00\xff\xff\x45\x00\xff\xff\x05\x00\x06\x00\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\x18\x00\x5b\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x64\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\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\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x5b\x00\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\x5b\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x64\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x27\x00\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x10\x00\x1f\x00\x20\x00\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x1a\x00\x29\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\x45\x00\x46\x00\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\x52\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x18\x00\xff\xff\x6c\x00\x1b\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\x01\x00\xff\xff\x27\x00\xff\xff\x05\x00\xff\xff\xff\xff\x2c\x00\x5b\x00\x2e\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\xff\xff\x65\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x43\x00\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x6c\x00\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x18\x00\x05\x00\x06\x00\x1b\x00\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x2e\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x09\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x10\x00\x11\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\x18\x00\xff\xff\x1a\x00\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\x59\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x62\x00\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\x6c\x00\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\x01\x00\xff\xff\x5a\x00\x5b\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x01\x00\x0b\x00\x03\x00\x04\x00\x05\x00\x06\x00\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\x18\x00\x10\x00\x11\x00\x12\x00\x1c\x00\xff\xff\xff\xff\x1f\x00\xff\xff\x18\x00\xff\xff\x1a\x00\xff\xff\x25\x00\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x6c\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x5a\x00\x5b\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\xff\xff\x0b\x00\x6c\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\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\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x2a\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x09\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x6c\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\x28\x00\x01\x00\x2a\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x5a\x00\x5b\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x10\x00\x6c\x00\x12\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x18\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x5b\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x5a\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x62\x00\x5a\x00\x5b\x00\x05\x00\x06\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x6b\x00\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\x2a\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x18\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x6c\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\x02\x00\x5a\x00\x5b\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x01\x00\xff\xff\x5a\x00\x5b\x00\x05\x00\x06\x00\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x18\x00\x12\x00\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\x02\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\x01\x00\x02\x00\xff\xff\x5b\x00\x05\x00\x06\x00\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\xff\xff\x10\x00\x18\x00\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\x18\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\xff\xff\xff\xff\x5b\x00\x05\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x5b\x00\x05\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\x10\x00\xff\xff\xff\xff\x1a\x00\xff\xff\x6c\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\xff\xff\xff\xff\x5b\x00\x05\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x5b\x00\x05\x00\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\x1e\x00\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x01\x00\x02\x00\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\x5b\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\x6d\x00\x6e\x00\xff\xff\xff\xff\x71\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\xff\xff\x7a\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\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\x98\x00\xff\xff\x9a\x00\xff\xff\xff\xff\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\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x86\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x6f\x00\x70\x00\x71\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\x72\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x86\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x7d\x00\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x86\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x6f\x00\x70\x00\x71\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\x6f\x00\x70\x00\x71\x00\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\x72\x00\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\x86\x00\xff\xff\x88\x00\xff\xff\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x72\x00\xff\xff\xff\xff\x75\x00\x76\x00\xff\xff\x78\x00\x79\x00\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\x72\x00\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\x86\x00\xff\xff\x88\x00\xff\xff\xac\x00\xad\x00\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x86\x00\xff\xff\xff\xff\xff\xff\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\x72\x00\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\x86\x00\xff\xff\x88\x00\xff\xff\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x72\x00\xff\xff\xff\xff\x75\x00\x76\x00\xff\xff\x78\x00\x79\x00\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\x72\x00\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\x86\x00\xff\xff\x88\x00\xff\xff\xac\x00\xad\x00\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x71\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\x72\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x86\x00\xff\xff\x88\x00\xff\xff\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x86\x00\xff\xff\x88\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\xff\xff\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\x71\x00\x72\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\xac\x00\xad\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\x72\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x86\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\x63\x00\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x64\x00\x65\x00\xff\xff\xff\xff\x68\x00\x69\x00\x6a\x00\x6b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\x67\x00\x68\x00\x69\x00\x6a\x00\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\x72\x00\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\x68\x00\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\x68\x00\x69\x00\x6a\x00\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\x72\x00\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\x68\x00\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\x68\x00\x69\x00\x6a\x00\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\x72\x00\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\x68\x00\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\xff\xff\xff\xff\x72\x00\x8f\x00\xff\xff\xff\xff\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8f\x00\xac\x00\xad\x00\x92\x00\x93\x00\xff\xff\x95\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xac\x00\xad\x00\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\x04\x00\x02\x00\x05\x00\x95\x00\x02\x00\x26\x01\x13\x03\x20\x01\x0a\x00\x08\x00\x24\x00\x0a\x00\x06\x03\x22\x00\x23\x00\x33\x00\x34\x00\x35\x00\xc0\x01\x1d\x03\x79\x01\xce\x02\x3d\x02\x29\x00\x24\x00\x79\x01\x2d\x03\xb3\x01\x25\x00\x26\x00\x27\x00\x20\x03\xa7\x02\x34\x02\x96\x00\x28\x00\xd3\x02\x29\x00\xb4\x02\xb5\x02\x0d\x03\x1a\x00\x7e\x02\x24\x00\x24\x00\xa6\x00\xd4\x02\xd5\x02\x97\x00\x26\x00\x27\x00\x1a\x00\xd9\x01\x49\x02\x4a\x02\x28\x00\x29\x00\x29\x00\x79\x01\x93\x02\xea\x01\x24\x00\x24\x00\x1a\x00\x66\x02\x55\x01\x26\x00\x27\x00\x24\x00\xcf\x02\xd0\x02\xd1\x02\x28\x00\xce\x02\x29\x00\x29\x00\x24\x00\x2a\x00\xda\x01\xc3\x02\xf1\x02\x29\x00\x98\x00\x79\x01\xa7\x00\x7a\x01\x09\x03\x28\x00\x40\x02\x29\x00\x0a\x03\x2a\x00\x1a\x00\xd4\x01\xea\x00\xdf\x01\x15\x03\x29\x01\x28\x01\x29\x01\x0b\x03\x86\x01\xd4\xff\xf2\x01\xf3\x01\x1a\x00\xd9\x01\x1a\x00\xd4\x01\x58\x02\x2a\x00\x2a\x00\xa9\x00\x87\x01\x9b\x00\x9c\x00\x9d\x00\x7f\x02\x4f\x01\x57\x01\x88\x01\x89\x01\x0f\x03\xd1\x02\xb6\x02\x38\x00\x9e\x00\x6a\x01\x2a\x00\x2a\x00\xd6\x02\x21\x02\xdc\x01\x1a\x00\x55\x02\x2a\x00\x2a\x03\x9d\x00\xe6\x02\x50\x01\x36\x00\x6d\x02\x35\x02\x2a\x00\x67\x02\xc1\x01\x38\x00\x2c\x01\x35\x02\x35\x02\xd7\x02\xb6\x02\x36\x00\x37\x00\x38\x00\x39\x00\x21\x03\x3a\x00\x3b\x00\x7b\x01\xd2\x02\x4b\x02\x4c\x02\xd8\x02\x7b\x01\x37\x00\x38\x00\x39\x00\xf4\x01\x3a\x00\x3b\x00\xd6\x02\x3c\x00\x06\x00\x2b\x00\x03\x00\x03\x00\x64\x02\x0b\x00\x0b\x00\x09\x00\xed\x02\x0b\x00\x0d\x00\x3c\x00\x72\x00\xdb\x01\x38\x00\x2c\x01\x4f\x01\x73\x00\xd7\x02\xe0\x01\x4d\x02\x2b\x00\x1a\x00\x55\x02\x7b\x01\x74\x00\xe0\x01\xe1\x02\x77\x02\x78\x02\x59\x02\xd8\x02\x42\x02\xdd\x00\xe1\x01\xaf\x02\x1a\x00\x66\x02\x99\x00\xd2\x02\xf4\x01\xe1\x01\xdf\x01\x72\x00\xae\x00\xc4\x02\x2a\x01\xe1\x01\x2a\x01\x7b\x01\x2b\x01\x85\x02\x2b\x01\x99\x00\xd5\x01\xce\x01\x74\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x38\x00\x2c\x01\x38\x00\x2c\x01\x2d\x01\xdd\x01\x2d\x01\xd6\x01\x58\x01\x83\x02\x84\x02\x59\x01\x0d\x00\x5a\x01\x0c\x02\xa0\x00\x38\x00\x9e\x00\x2a\x01\x9f\x00\x3b\x00\x56\x02\x2b\x01\x75\x00\x5b\x01\x76\x00\x77\x00\x5c\x01\x0f\x00\x78\x00\x4f\x00\x50\x00\x79\x00\xe0\x00\x38\x00\x2c\x01\xa0\x00\x1c\x02\x2d\x01\x51\x00\xcf\x01\x1d\x02\x15\x00\xb2\x00\x21\x00\x0e\x03\x16\x00\x7a\x00\x17\x00\x7f\x01\x79\x02\x72\x00\xbb\x02\x85\x02\x75\x00\x68\x02\x76\x00\x77\x00\x0e\x00\x00\x02\x78\x00\x4f\x00\x50\x00\x79\x00\x74\x00\xc5\x02\x87\x02\x22\x00\x55\x00\x94\x02\x51\x00\x7b\x00\x57\x00\xe2\x02\x58\x00\x9b\x00\x9c\x00\x9d\x00\x7a\x00\x1a\x00\x7e\x02\x59\x00\xa7\x00\x57\x02\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xda\x02\xaf\x02\x0f\x00\xb2\x02\x62\x01\x63\x01\x52\x02\x5b\x00\x5c\x00\x55\x00\xc8\x00\xcc\x02\x7b\x00\x57\x00\x15\x02\x58\x00\x16\x02\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\x47\x01\x2c\x03\xad\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x48\x01\x27\x02\x18\x00\x75\x00\x73\x02\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\xcf\x00\xa9\x00\xa5\x01\xab\x00\x9c\x00\x9d\x00\x51\x00\xa6\x01\xad\x00\xa7\x01\x89\x01\x16\x01\x19\x00\x21\x00\x7a\x00\x49\x01\xc2\x02\xd0\x00\x9b\x00\x9c\x00\x9d\x00\x80\x02\x1a\x00\xa1\x02\x75\x00\x7c\x02\x76\x00\x77\x00\x7e\x01\x17\x02\x78\x00\x4f\x00\x50\x00\x79\x00\x40\xff\x55\x00\x22\x00\xfa\x02\x7b\x00\x89\x02\x51\x00\x58\x00\x81\x02\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\x7a\x00\x24\x03\xad\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x38\x00\x9e\x00\x1e\x02\x9f\x00\x3b\x00\xf1\x01\x7f\x01\x5b\x00\x5c\x00\xc9\x00\x30\x02\x71\x01\x55\x00\xfb\x02\xfc\x02\x56\x00\x57\x00\x25\x03\x58\x00\xa2\x02\xa0\x00\xae\x00\x37\x00\x38\x00\x39\x00\x71\x01\x9f\x00\x3b\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xa4\x02\xc9\x01\x5b\x00\x5c\x00\x7d\x02\xa9\x00\xa5\x01\xab\x00\x9c\x00\x9d\x00\xae\x00\xa6\x01\xad\x00\xa7\x01\x89\x01\xa0\x00\x9a\xff\x75\x02\x76\x02\x77\x02\x78\x02\x4f\x01\x9a\xff\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xcf\x00\x1e\x02\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\x39\x02\x1b\x03\xad\x00\x38\x00\x9e\x00\x14\x02\x9f\x00\x3b\x00\xa0\x00\x08\x01\xd0\x00\xdb\x00\x3e\x02\xdc\x00\xfd\x02\x4b\x02\x4c\x02\xae\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xa0\x00\x28\x03\xad\x00\x15\x01\x37\x00\x38\x00\x39\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x31\x01\x32\x01\x71\x01\x41\x02\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\x33\x01\x12\x03\xad\x00\x52\x02\x45\x02\x16\x01\xa0\x00\x1a\x00\xa1\x02\x31\x02\x3b\x00\xf8\x01\x21\x00\x37\x00\x38\x00\x39\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xac\x01\xe3\x02\xad\x00\x79\x02\xa5\x02\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xae\x00\x28\x02\xad\x00\x18\x03\x22\x00\xad\x01\xf9\x01\xfa\x01\x38\x00\x9e\x00\xee\x02\xef\x02\xf0\x02\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x46\x02\x19\x03\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xae\x00\x64\x02\xad\x00\x5c\x02\xe0\x00\xa3\x02\xe2\x00\x50\x02\xa0\x00\xc1\x00\x5f\x02\x38\x00\x9e\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xae\x00\x6d\x02\xad\x00\xe5\x00\xf1\x02\xc2\x00\xdf\x00\xe0\x00\x65\x02\xc9\x01\xa0\x00\xca\x01\xcb\x01\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xb9\x02\x91\x01\x9d\x00\xae\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xe4\x00\xa9\x01\xad\x00\xb0\x01\x5b\x01\xfd\x01\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xe7\x00\xe8\x00\xe9\x00\xae\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xfe\x01\x5e\x01\xad\x00\xb2\x01\xae\x00\x2b\x02\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x40\x02\xfa\x02\x64\x01\x4b\xfe\x4b\xfe\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xea\x00\xb6\x01\x31\x02\x3b\x00\x4b\xfe\xa0\x00\xeb\x00\xae\x00\x38\x00\x2c\x01\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xa0\x00\x63\x01\xad\x00\x03\x03\xbc\x01\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x27\x03\x5f\x01\xc8\xfe\x23\x02\xc8\xfe\xae\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\x33\x01\x85\x01\xad\x00\x20\x03\xa0\x00\xc4\x01\x60\x01\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x21\x02\x37\x00\x38\x00\x39\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xae\x00\x8a\x01\xad\x00\x01\x01\x31\x02\x3b\x00\xa0\x00\x38\x00\x9e\x00\xcc\x01\x9f\x00\x3b\x00\xc8\x01\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x40\x00\x41\x00\x32\x02\xae\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xa0\x00\xac\x00\xad\x00\xa7\x02\x05\x03\x13\x00\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xb1\x02\x40\x00\x41\x00\xfd\x02\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xb2\x02\xb6\x00\xad\x00\x01\x03\x74\x01\xff\x02\xa0\x00\x37\x00\x38\x00\x39\x00\xae\x00\xd8\x00\xd9\x00\x08\x01\xae\x01\xdb\x00\xdf\x00\xdc\x00\xe1\x00\x5a\x00\x3b\x00\xaf\x01\xe4\x01\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xfb\x01\x40\x00\x41\x00\xae\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xe4\x00\xeb\x00\xad\x00\x34\x02\xeb\x02\xec\x02\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xe7\x00\xe8\x00\xe9\x00\xae\x00\xa9\x00\xaa\x00\xab\x00\x9c\x00\x9d\x00\xf1\x01\xf1\x00\xad\x00\x2b\x02\xea\x01\x02\x02\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x0d\x02\x43\x01\x2c\x03\x20\x02\xa9\x00\xa3\x01\x9b\x00\x9c\x00\x9d\x00\xae\x00\x4c\x01\x14\x02\x21\x02\xa4\x01\x4d\x01\xa0\x00\x01\x03\x02\x03\x40\x01\x4e\x01\xdf\x00\x74\x01\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x41\x01\xd8\x00\xd9\x00\xae\x00\x10\x03\x11\x03\x9b\x00\x9c\x00\x9d\x00\xa9\x00\x5e\x02\x9b\x00\x9c\x00\x9d\x00\xe4\x00\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x38\x00\xff\x01\xca\x02\xcb\x02\x00\x02\xe7\x00\xe8\x00\xe9\x00\x75\x01\xa9\x00\x6e\x02\x9b\x00\x9c\x00\x9d\x00\x8e\x02\xa0\x00\x9b\x00\x9c\x00\x9d\x00\xae\x00\xa9\x00\xbe\x01\x9b\x00\x9c\x00\x9d\x00\x39\x01\x38\x00\x39\x00\x42\x01\x3a\x01\x3b\x00\x36\x01\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x43\x01\xd9\x02\xf6\x01\xae\x00\xa9\x00\xa1\x01\x9b\x00\x9c\x00\x9d\x00\xa9\x00\xa2\x01\x9b\x00\x9c\x00\x9d\x00\x6b\x01\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xf8\x02\x9c\x00\x9d\x00\xae\x00\x78\x01\xc9\xfe\xb8\x01\xc9\xfe\x9b\x00\x9c\x00\x9d\x00\x19\x02\x81\x01\x05\x03\x71\x00\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xba\x01\x83\x01\x9b\x00\x9c\x00\x9d\x00\xf9\x02\xdd\x02\xde\x02\xbb\x01\xae\x00\x9b\x00\x9c\x00\x9d\x00\x8c\x01\xae\x00\xa0\x00\x08\x01\x8b\x01\xdb\x00\x8f\x01\xdc\x00\xb0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\xf4\x02\x9d\x00\xbf\x01\xae\x00\x9b\x00\x9c\x00\x9d\x00\x8a\x02\x8b\x02\xa0\x01\xa0\x00\x9b\x00\x9c\x00\x9d\x00\xae\x00\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x38\x00\x9e\x00\xed\x00\x9f\x00\x3b\x00\x21\x01\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x60\x02\x61\x02\x62\x02\xae\x00\xa0\x00\x91\x01\x9d\x00\x92\x01\xae\x00\xa0\x00\x9a\x00\xf0\x00\x9b\x00\x9c\x00\x9d\x00\xa0\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x38\x00\x9e\x00\x59\x00\x9f\x00\x3b\x00\x8c\x02\x8d\x02\xbb\x02\x9d\x00\x71\x00\x38\x00\x9e\x00\x23\x01\x9f\x00\x3b\x00\xa0\x00\xf7\x02\x9d\x00\x38\x00\x9e\x00\xa0\x00\x9f\x00\x3b\x00\x1f\x00\x95\x02\x9c\x00\x9d\x00\x9f\x02\xf6\x01\x96\x02\xa0\x00\xbc\x02\x2f\x00\x38\x00\x9e\x00\x1e\x00\x9f\x00\x3b\x00\xa0\x00\x3e\x00\x3f\x00\x38\x00\x9e\x00\x0f\x00\x9f\x00\x3b\x00\x97\x02\x98\x02\x99\x02\x37\x02\x9a\x02\xb7\x02\x9d\x00\xa0\x00\x42\x00\x25\x02\x13\x00\xf5\x02\x9c\x00\x9d\x00\xff\x02\xa0\x00\x38\x00\x9e\x00\x1d\x03\x9f\x00\x3b\x00\x38\x00\x9e\x00\xfd\x01\x9f\x00\x3b\x00\x91\x01\x9d\x00\x38\x00\x9e\x00\x1f\x03\x9f\x00\x3b\x00\xf6\x02\x98\x02\x99\x02\xa0\x00\x9a\x02\x67\x01\x38\x00\x39\x00\xa0\x00\x3a\x01\x3b\x00\x19\x00\x1a\x00\x1b\x00\x93\x01\xa0\x00\x37\x02\xf6\x01\xd7\x00\x62\x01\x38\x00\x9e\x00\x23\x03\x9f\x00\x3b\x00\xd8\x00\xd9\x00\x2a\x03\x38\x00\x9e\x00\x2d\x00\x9f\x00\x3b\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xa0\x00\x94\x01\x95\x01\x38\x00\x9e\x00\x08\x03\x9f\x00\x3b\x00\xa0\x00\x9b\x02\x4b\x00\x0d\x03\x38\x00\x9e\x00\x4b\xfe\x9f\x00\x3b\x00\x19\x02\x6d\x01\x1a\x02\x71\x00\x38\x00\x9e\x00\xa0\x00\x9f\x00\x9c\x02\x2d\x00\x4d\x00\x1c\x00\x1a\x00\x1b\x00\x15\x03\xa0\x00\x38\x00\x9e\x00\x1b\x03\x3a\x01\x3b\x00\x6f\x02\xf6\x01\x58\x01\xa0\x00\x9b\x02\x59\x01\xe5\x02\x2c\x02\x2d\x00\x38\x00\x9e\x00\xe6\x02\x9f\x00\x3b\x00\xe9\x02\xb9\x01\x38\x00\x9e\x00\x5b\x01\x9f\x00\x9c\x02\x5c\x01\xe6\x01\xe7\x01\xe8\x01\xe8\x02\x3e\x00\x3f\x00\x2d\x00\xa0\x00\x38\x00\x9e\x00\x40\x00\x9f\x00\x3b\x00\xf3\x02\xa0\x00\xf5\x01\xf6\x01\x37\x01\x13\x00\x42\x00\x91\x00\x92\x00\x93\x00\x94\x00\xb4\x02\x35\x01\x30\x00\x31\x00\xa0\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x0d\x01\xe0\x00\xe1\x00\xe2\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x0e\x01\x12\x00\x13\x00\x40\x00\x41\x00\x4b\xfe\x4b\xfe\x67\x00\x2d\x00\x0f\x01\x68\x00\x10\x01\x11\x01\x88\xfe\xe5\x00\x5f\x00\x60\x00\xbd\x00\xab\x02\xac\x02\x11\x00\x12\x00\x69\x00\x2d\x00\x12\x01\x13\x01\x14\x01\x77\x01\x78\x01\x6a\x00\x11\x00\x12\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\xb9\x02\x80\x00\x81\x00\x82\x00\x4b\x00\x17\x01\x18\x01\x71\x00\x11\x00\x12\x00\xc7\x02\xbf\x02\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\xce\x02\x4d\x00\xe0\x02\x71\x02\xbe\x00\x89\x00\x75\x02\x7b\x02\x7c\x02\x4b\x00\xbf\x00\x76\xff\x83\x02\x2d\x00\x89\x02\xdf\x00\xe0\x00\xc0\x00\x8f\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4d\x00\x90\x02\x91\x02\xdf\x01\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x5e\x01\xe4\x00\x93\x02\x2d\x00\xa1\x02\x37\x02\xae\x02\x4b\xfe\x23\x02\x2a\x02\x4b\xfe\x2b\x02\x30\x02\xe7\x00\xe8\x00\xe9\x00\xd4\x00\x49\x01\x2c\x02\xd5\x00\x2e\x02\xd6\x00\x4b\xfe\xd7\x00\x4b\xfe\x2f\x02\xfd\x01\x4b\xfe\x37\x02\x4b\xfe\xd8\x00\xd9\x00\xda\x00\x39\x02\xdb\x00\x3e\x00\xdc\x00\x3c\x02\x3d\x02\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x7d\x01\x4b\xfe\x4b\xfe\x4b\xfe\x3b\x02\x4b\xfe\x44\x02\x4b\xfe\x48\x02\x49\x02\x52\x02\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x2d\x00\x4b\xfe\x5e\x02\x5b\x02\x5c\x02\x4b\xfe\x6c\x02\x4b\xfe\xab\x01\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x6a\x02\x4b\xfe\x77\xff\x4b\xfe\xb0\x01\x62\x01\x4b\xfe\xb2\x01\x7d\x01\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\xb6\x01\xb8\x01\xc7\x01\xbe\x01\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\xfe\xc6\x01\xc8\x01\x4b\xfe\x77\xff\x62\x01\xce\x01\xd1\x01\xd8\x01\xd9\x01\x4b\x00\x3d\x01\xe9\x01\x7d\x01\xdf\x01\x4b\xfe\xf1\x01\x4b\xfe\xfb\x01\x02\x02\x4b\xfe\x81\x01\x4b\xfe\xfd\x01\x11\x02\x12\x02\x13\x02\x4d\x00\x1e\x02\x1b\x02\x28\x01\x55\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x57\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x56\xfe\x4b\xfe\x59\xfe\x4b\xfe\x5c\xfe\x3c\x01\x3d\x01\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x3f\x01\x4b\xfe\x49\x01\x4a\x01\x4b\x01\x4b\xfe\x51\x01\x4b\xfe\x52\x01\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x57\x01\x4b\xfe\x54\x01\x4b\xfe\x55\x01\x6d\x01\x4b\xfe\x69\x01\x4b\xfe\x4b\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\x70\x01\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\x71\x01\xff\x00\x7d\x01\x81\x01\xe8\xfe\x85\x01\x83\x01\xe8\xfe\x8f\x01\x8e\x01\xe8\xfe\xe8\xfe\xe8\xfe\xa9\x01\xe8\xfe\x2d\x00\xe8\xfe\x91\x01\xe8\xfe\xa9\x00\xa9\x00\xb4\x00\xe8\xfe\xb2\x00\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xb5\x00\xe8\xfe\xb6\x00\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xef\x00\x19\x01\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xc2\x00\x23\x01\x0d\x00\x25\x01\x26\x01\xe8\xfe\x4e\x00\xe8\xfe\x2e\x00\x2f\x00\x33\x00\x1e\x00\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\xe8\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\xff\xff\x08\x00\x0e\x00\xe8\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\xc3\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x58\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\xe8\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x00\x00\x5a\x00\x3b\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x7f\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x3e\x00\x3f\x00\x71\x00\x00\x00\x40\x00\x41\x00\x83\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x8a\x00\x00\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x1a\x01\x8f\x00\x00\x00\x90\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x4d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x1b\x01\x1c\x01\x1d\x01\x1e\x01\x1f\x01\x20\x01\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x7f\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x4d\x00\x3e\x00\x00\x00\x71\x00\x00\x00\x40\x00\x41\x00\x83\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x00\x00\x8f\x00\x00\x00\x90\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x4d\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x00\x00\x3e\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\xe3\x01\xe4\x01\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4d\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x44\x00\x00\x00\x00\x00\x4b\xfe\x48\x00\x49\x00\x4a\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x4b\x00\x00\x00\x00\x00\xc7\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x4d\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x00\x00\x58\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x37\x00\x38\x00\x39\x00\x00\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x3e\x00\x00\x00\x00\x00\x4b\xfe\x40\x00\x41\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x9e\x02\x4b\xfe\xa3\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\xa4\x00\x4b\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x9f\x02\x00\x00\x00\x00\x9e\x01\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x6a\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x4b\x00\x4b\xfe\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x8f\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4d\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\xdf\x00\x2d\x00\xe1\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x73\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x01\x00\x00\x4b\xfe\xe4\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x74\x01\x00\x00\x00\x00\x00\x00\xe7\x00\xe8\x00\xe9\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x3e\x00\x00\x00\x00\x00\x4b\xfe\x40\x00\x41\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x4b\xfe\xa3\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\xa4\x00\x4b\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x9f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x6a\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x4b\x00\x4b\xfe\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4d\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\xd4\x00\x00\x00\x2d\x00\xd5\x00\x00\x00\x52\x01\x4b\xfe\xd7\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x00\xd9\x00\xda\x00\x00\x00\xdb\x00\x00\x00\xdc\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x4b\xfe\xe3\x00\xe4\x00\x00\x00\xe5\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\xe7\x00\xe8\x00\xe9\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x0e\x01\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x0f\x01\x00\x00\x00\x00\xe4\x00\x69\x00\xe5\x00\x7e\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\xe7\x00\xe8\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x4b\xfe\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\xbd\x00\x00\x00\xd5\x00\x00\x00\x43\x01\x69\x00\xd7\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\xd8\x00\xd9\x00\xda\x00\x00\x00\xdb\x00\x00\x00\xdc\x00\x00\x00\x3e\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\xc3\x01\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\xc1\x02\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x8f\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4d\x00\x00\x00\x00\x00\x3e\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\xdf\x00\xe0\x00\xe1\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\xe4\x01\x4b\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\xe3\x00\xe4\x00\x4b\xfe\xe5\x00\x4b\xfe\xe6\x00\x00\x00\x4b\xfe\x4b\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\xe7\x00\xe8\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4d\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x44\x00\x00\x00\x00\x00\x4b\xfe\x48\x00\x49\x00\x4a\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\xd4\x00\x00\x00\x00\x00\xd5\x00\x00\x00\x52\x01\x67\x00\xd7\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x00\xd9\x00\xda\x00\x00\x00\xdb\x00\x00\x00\xdc\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\xea\x02\x3e\x00\x00\x00\x00\x00\x89\x00\x40\x00\x41\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x8c\x00\x8d\x00\x00\x00\xa2\x00\x8f\x00\xa3\x00\x00\x00\x00\x00\x00\x00\xeb\x02\x00\x00\xa4\x00\x4d\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\xbe\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x9e\x01\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x01\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\xff\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x0f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\xc3\x01\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\xc4\x01\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x3e\x00\x4b\x00\x6a\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x4d\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x8c\x00\x8d\x00\x00\x00\x00\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\xdc\x02\x3e\x00\x00\x00\x00\x00\x89\x00\x40\x00\x41\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x02\x8f\x00\xa3\x00\x90\x00\x00\x00\x00\x00\xdd\x02\x00\x00\xa4\x00\x4d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x9f\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x4b\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x8c\x00\x8d\x00\x00\x00\x00\x00\x8f\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x00\x00\x00\x00\x71\x00\x66\x01\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x8f\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4d\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x4b\xfe\x4b\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\xd1\x00\xd2\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4d\x00\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x4b\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x00\x00\x4b\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7d\x00\x00\x00\x4b\xfe\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x4b\xfe\xd4\x00\x00\x00\x00\x00\xd5\x00\x00\x00\xd6\x00\x67\x00\xd7\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x00\xd9\x00\xda\x00\x00\x00\xdb\x00\x00\x00\xdc\x00\x69\x00\xdd\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x00\x00\x3e\x00\x00\x00\x71\x00\x00\x00\x40\x00\x41\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\xa4\x00\x4b\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x80\x00\x81\x00\x82\x00\x4b\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x84\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x5e\x00\x3f\x00\x5f\x00\x60\x00\x61\x00\x41\x00\x17\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x3f\x00\x69\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\xe3\x00\xe4\x00\x42\x00\xe5\x00\x45\x01\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x43\x00\xe7\x00\xe8\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x71\x00\xc0\xfe\xc0\xfe\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x18\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x67\x00\x00\x00\x4d\x00\x68\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x69\x00\x00\x00\x40\x00\x00\x00\x00\x00\x4b\xfe\x4b\x00\x6a\x00\x46\x01\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x01\x17\x03\x00\x00\x4c\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x18\x03\x4b\xfe\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x4d\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x55\x02\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x67\x00\x40\x00\x41\x00\x68\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x6a\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\xe0\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\xa2\x00\x73\x01\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\xa4\x00\x00\x00\x0f\x01\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\xa5\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x3f\x00\xa6\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x3e\x00\x00\x00\xb0\x00\x4b\x00\x40\x00\x41\x00\x00\x00\x97\x01\xe0\x00\x3e\x00\xe2\x00\x5f\x00\x60\x00\x40\x00\x41\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xa4\x00\xa2\x00\x73\x01\xa3\x00\x98\x01\x00\x00\x00\x00\xe5\x00\x00\x00\xa4\x00\x00\x00\x0f\x01\x00\x00\x99\x01\x00\x00\x00\x00\x79\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4d\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\xb0\x00\x4b\x00\x40\x00\x41\x00\x00\x00\x97\x01\xe0\x00\x00\x00\xe2\x00\x4d\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x98\x01\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x01\x00\x00\x00\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x27\x03\x3e\x00\x00\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x52\xff\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x4d\x00\x52\xff\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x79\xff\x3e\x00\xc0\x02\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\xb0\x00\x4b\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\xa2\x00\x4d\x00\xa3\x00\x00\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xa4\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x00\xe4\x00\x4b\x00\xe5\x00\x45\x01\x00\x00\x00\x00\x00\x00\xa5\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x00\xe8\x00\xe9\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xb0\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\xed\x00\xb0\x00\x4b\x00\x40\x00\x41\x00\x00\x00\x00\x00\x52\xff\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x52\xff\x00\x00\x00\x00\x00\x00\x46\x01\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\xc0\x02\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\xa4\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x71\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x3f\x00\xb0\x00\x4b\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x3e\x00\x00\x00\xb0\x00\x4b\x00\x40\x00\x41\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\xa4\x00\xa3\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x3f\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x3e\x00\x3f\x00\x00\x00\x4b\x00\x40\x00\x41\x00\x00\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\xcb\x00\xc7\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xcc\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x00\x00\x00\x00\x4b\x00\x40\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x4b\x00\x40\x00\x00\x00\x00\x00\x00\x00\x66\x01\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x66\x01\x00\x00\x00\x00\x43\x00\x00\x00\x4d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x00\x00\x00\x00\x4b\x00\x40\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x4b\x00\x40\x00\x00\x00\x00\x00\x00\x00\x2f\x01\x30\x01\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x2f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x31\x01\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x3f\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\xff\x00\xb8\x00\xb9\x00\x00\x01\xbb\x00\x76\x00\x77\x00\x00\x00\x4b\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x01\x01\x02\x01\x00\x00\x00\x00\x03\x01\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x04\x01\x00\x00\x05\x01\x00\x00\x00\x00\x06\x01\x07\x01\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xd8\x00\xd9\x00\x08\x01\x09\x01\xdb\x00\x0a\x01\x0b\x01\x5b\x00\x5c\x00\xeb\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x23\x03\xed\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf6\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\xac\x02\xf8\x00\xf9\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\xeb\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x51\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\xec\x01\xed\x01\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xee\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xeb\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x05\x02\xed\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf6\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x38\x01\xf8\x00\xf9\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\xf6\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\xf7\x00\xf8\x00\xf9\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xcd\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x99\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\xe0\x02\x00\x00\x5b\x00\x5c\x00\x4e\x00\x4f\x00\x50\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x51\x00\x00\x00\x00\x00\x52\x00\x13\x00\x00\x00\x53\x00\x27\x02\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x99\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x71\x02\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xeb\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\xa8\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\x01\x00\x00\x00\x00\x00\x00\xd1\x01\xd2\x01\xd3\x01\x4f\x00\x50\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x99\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x6a\x02\x00\x00\x5b\x00\x5c\x00\x4e\x00\x4f\x00\x50\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x51\x00\x00\x00\x00\x00\x52\x00\x13\x00\x00\x00\x53\x00\x54\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x99\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\xb4\x01\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf6\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x02\xf9\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x99\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x51\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x9b\x01\x00\x00\x9c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x99\x01\xb8\x00\xb9\x00\x9a\x01\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x00\x00\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xfb\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\xfc\x00\xfd\x00\x00\x00\x09\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x0a\x02\x51\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x2e\x03\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x0b\x03\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf3\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\xc1\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xc7\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x72\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x86\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x91\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xa9\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x24\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x44\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x4e\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x4f\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x06\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x07\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x08\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x0b\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x0f\x02\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x66\x01\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x7d\x01\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\xcc\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xef\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\xf4\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf5\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x3d\x01\xb9\x00\xf3\x00\xbb\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\xf2\x00\xb9\x00\xf3\x00\xbb\x00\x76\x00\x77\x00\x5b\x00\x5c\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x02\x00\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x51\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xc9\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x03\x02\x69\x01\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x01\x77\x00\x00\x00\x00\x00\x78\x00\x4f\x00\x50\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x53\x02\xd3\x01\x4f\x00\x50\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x35\x01\x4f\x00\x50\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x6d\x01\x4f\x00\x50\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x6e\x01\x4f\x00\x50\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\xd0\x00\x4f\x00\x50\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\xfa\x00\x4f\x00\x50\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyReduceArr = array (1, 448) [ + (1 , happyReduce_1), + (2 , happyReduce_2), + (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), + (426 , happyReduce_426), + (427 , happyReduce_427), + (428 , happyReduce_428), + (429 , happyReduce_429), + (430 , happyReduce_430), + (431 , happyReduce_431), + (432 , happyReduce_432), + (433 , happyReduce_433), + (434 , happyReduce_434), + (435 , happyReduce_435), + (436 , happyReduce_436), + (437 , happyReduce_437), + (438 , happyReduce_438), + (439 , happyReduce_439), + (440 , happyReduce_440), + (441 , happyReduce_441), + (442 , happyReduce_442), + (443 , happyReduce_443), + (444 , happyReduce_444), + (445 , happyReduce_445), + (446 , happyReduce_446), + (447 , happyReduce_447), + (448 , happyReduce_448) + ] + +happy_n_terms = 110 :: Int +happy_n_nonterms = 183 :: Int + +happyReduce_1 = happyMonadReduce 1# 0# happyReduction_1 +happyReduction_1 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut5 happy_x_1 of { happy_var_1 -> + ( mkPageModule happy_var_1)} + ) (\r -> happyReturn (happyIn4 r)) + +happyReduce_2 = happyMonadReduce 5# 0# happyReduction_2 +happyReduction_2 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut6 happy_x_2 of { happy_var_2 -> + case happyOut177 happy_x_4 of { happy_var_4 -> + case happyOut5 happy_x_5 of { happy_var_5 -> + ( mkPage happy_var_2 happy_var_4 happy_var_5)}}} + ) (\r -> happyReturn (happyIn4 r)) + +happyReduce_3 = happySpecReduce_1 0# happyReduction_3 +happyReduction_3 happy_x_1 + = case happyOut6 happy_x_1 of { happy_var_1 -> + happyIn4 + (happy_var_1 + )} + +happyReduce_4 = happyMonadReduce 10# 1# happyReduction_4 +happyReduction_4 (happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + 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) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut121 happy_x_3 of { happy_var_3 -> + case happyOut123 happy_x_4 of { happy_var_4 -> + case happyOut125 happy_x_5 of { happy_var_5 -> + case happyOut119 happy_x_7 of { happy_var_7 -> + case happyOut121 happy_x_9 of { happy_var_9 -> + ( do { n <- checkEqNames happy_var_3 happy_var_9; + let { cn = reverse happy_var_7; + as = reverse happy_var_4; }; + return $ HsXTag happy_var_1 n as happy_var_5 cn })}}}}}} + ) (\r -> happyReturn (happyIn5 r)) + +happyReduce_5 = happyReduce 6# 1# happyReduction_5 +happyReduction_5 (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 happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut121 happy_x_3 of { happy_var_3 -> + case happyOut123 happy_x_4 of { happy_var_4 -> + case happyOut125 happy_x_5 of { happy_var_5 -> + happyIn5 + (HsXETag happy_var_1 happy_var_3 (reverse happy_var_4) happy_var_5 + ) `HappyStk` happyRest}}}} + +happyReduce_6 = happyReduce 6# 2# happyReduction_6 +happyReduction_6 (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 happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut180 happy_x_3 of { happy_var_3 -> + case happyOut11 happy_x_4 of { happy_var_4 -> + case happyOut7 happy_x_6 of { happy_var_6 -> + happyIn6 + (HsModule happy_var_1 happy_var_3 happy_var_4 (fst happy_var_6) (snd happy_var_6) + ) `HappyStk` happyRest}}}} + +happyReduce_7 = happySpecReduce_2 2# happyReduction_7 +happyReduction_7 happy_x_2 + happy_x_1 + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut7 happy_x_2 of { happy_var_2 -> + happyIn6 + (HsModule happy_var_1 main_mod (Just [HsEVar (UnQual main_name)]) + (fst happy_var_2) (snd happy_var_2) + )}} + +happyReduce_8 = happySpecReduce_3 3# happyReduction_8 +happyReduction_8 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn7 + (happy_var_2 + )} + +happyReduce_9 = happySpecReduce_3 3# happyReduction_9 +happyReduction_9 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut8 happy_x_2 of { happy_var_2 -> + happyIn7 + (happy_var_2 + )} + +happyReduce_10 = happyReduce 4# 4# happyReduction_10 +happyReduction_10 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut16 happy_x_2 of { happy_var_2 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + happyIn8 + ((reverse happy_var_2, happy_var_4) + ) `HappyStk` happyRest}} + +happyReduce_11 = happySpecReduce_2 4# happyReduction_11 +happyReduction_11 happy_x_2 + happy_x_1 + = case happyOut31 happy_x_2 of { happy_var_2 -> + happyIn8 + (([], happy_var_2) + )} + +happyReduce_12 = happySpecReduce_3 4# happyReduction_12 +happyReduction_12 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut16 happy_x_2 of { happy_var_2 -> + happyIn8 + ((reverse happy_var_2, []) + )} + +happyReduce_13 = happySpecReduce_1 4# happyReduction_13 +happyReduction_13 happy_x_1 + = happyIn8 + (([], []) + ) + +happyReduce_14 = happySpecReduce_2 5# happyReduction_14 +happyReduction_14 happy_x_2 + happy_x_1 + = happyIn9 + (() + ) + +happyReduce_15 = happySpecReduce_1 6# happyReduction_15 +happyReduction_15 happy_x_1 + = happyIn10 + (() + ) + +happyReduce_16 = happySpecReduce_0 6# happyReduction_16 +happyReduction_16 = happyIn10 + (() + ) + +happyReduce_17 = happySpecReduce_1 7# happyReduction_17 +happyReduction_17 happy_x_1 + = case happyOut12 happy_x_1 of { happy_var_1 -> + happyIn11 + (Just happy_var_1 + )} + +happyReduce_18 = happySpecReduce_0 7# happyReduction_18 +happyReduction_18 = happyIn11 + (Nothing + ) + +happyReduce_19 = happyReduce 4# 8# happyReduction_19 +happyReduction_19 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut14 happy_x_2 of { happy_var_2 -> + happyIn12 + (reverse happy_var_2 + ) `HappyStk` happyRest} + +happyReduce_20 = happySpecReduce_3 8# happyReduction_20 +happyReduction_20 happy_x_3 + happy_x_2 + happy_x_1 + = happyIn12 + ([] + ) + +happyReduce_21 = happySpecReduce_1 9# happyReduction_21 +happyReduction_21 happy_x_1 + = happyIn13 + (() + ) + +happyReduce_22 = happySpecReduce_0 9# happyReduction_22 +happyReduction_22 = happyIn13 + (() + ) + +happyReduce_23 = happySpecReduce_3 10# happyReduction_23 +happyReduction_23 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut14 happy_x_1 of { happy_var_1 -> + case happyOut15 happy_x_3 of { happy_var_3 -> + happyIn14 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_24 = happySpecReduce_1 10# happyReduction_24 +happyReduction_24 happy_x_1 + = case happyOut15 happy_x_1 of { happy_var_1 -> + happyIn14 + ([happy_var_1] + )} + +happyReduce_25 = happySpecReduce_1 11# happyReduction_25 +happyReduction_25 happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + happyIn15 + (HsEVar happy_var_1 + )} + +happyReduce_26 = happySpecReduce_1 11# happyReduction_26 +happyReduction_26 happy_x_1 + = case happyOut182 happy_x_1 of { happy_var_1 -> + happyIn15 + (HsEAbs happy_var_1 + )} + +happyReduce_27 = happyReduce 4# 11# happyReduction_27 +happyReduction_27 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut182 happy_x_1 of { happy_var_1 -> + happyIn15 + (HsEThingAll happy_var_1 + ) `HappyStk` happyRest} + +happyReduce_28 = happySpecReduce_3 11# happyReduction_28 +happyReduction_28 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut182 happy_x_1 of { happy_var_1 -> + happyIn15 + (HsEThingWith happy_var_1 [] + )} + +happyReduce_29 = happyReduce 4# 11# happyReduction_29 +happyReduction_29 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut182 happy_x_1 of { happy_var_1 -> + case happyOut25 happy_x_3 of { happy_var_3 -> + happyIn15 + (HsEThingWith happy_var_1 (reverse happy_var_3) + ) `HappyStk` happyRest}} + +happyReduce_30 = happySpecReduce_2 11# happyReduction_30 +happyReduction_30 happy_x_2 + happy_x_1 + = case happyOut180 happy_x_2 of { happy_var_2 -> + happyIn15 + (HsEModuleContents happy_var_2 + )} + +happyReduce_31 = happySpecReduce_3 12# happyReduction_31 +happyReduction_31 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut16 happy_x_1 of { happy_var_1 -> + case happyOut17 happy_x_3 of { happy_var_3 -> + happyIn16 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_32 = happySpecReduce_1 12# happyReduction_32 +happyReduction_32 happy_x_1 + = case happyOut17 happy_x_1 of { happy_var_1 -> + happyIn16 + ([happy_var_1] + )} + +happyReduce_33 = happyReduce 6# 13# happyReduction_33 +happyReduction_33 (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 happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut18 happy_x_3 of { happy_var_3 -> + case happyOut180 happy_x_4 of { happy_var_4 -> + case happyOut19 happy_x_5 of { happy_var_5 -> + case happyOut20 happy_x_6 of { happy_var_6 -> + happyIn17 + (HsImportDecl happy_var_1 happy_var_4 happy_var_3 happy_var_5 happy_var_6 + ) `HappyStk` happyRest}}}}} + +happyReduce_34 = happySpecReduce_1 14# happyReduction_34 +happyReduction_34 happy_x_1 + = happyIn18 + (True + ) + +happyReduce_35 = happySpecReduce_0 14# happyReduction_35 +happyReduction_35 = happyIn18 + (False + ) + +happyReduce_36 = happySpecReduce_2 15# happyReduction_36 +happyReduction_36 happy_x_2 + happy_x_1 + = case happyOut180 happy_x_2 of { happy_var_2 -> + happyIn19 + (Just happy_var_2 + )} + +happyReduce_37 = happySpecReduce_0 15# happyReduction_37 +happyReduction_37 = happyIn19 + (Nothing + ) + +happyReduce_38 = happySpecReduce_1 16# happyReduction_38 +happyReduction_38 happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn20 + (Just happy_var_1 + )} + +happyReduce_39 = happySpecReduce_0 16# happyReduction_39 +happyReduction_39 = happyIn20 + (Nothing + ) + +happyReduce_40 = happyReduce 5# 17# happyReduction_40 +happyReduction_40 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut22 happy_x_1 of { happy_var_1 -> + case happyOut23 happy_x_3 of { happy_var_3 -> + happyIn21 + ((happy_var_1, reverse happy_var_3) + ) `HappyStk` happyRest}} + +happyReduce_41 = happyReduce 4# 17# happyReduction_41 +happyReduction_41 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut22 happy_x_1 of { happy_var_1 -> + happyIn21 + ((happy_var_1, []) + ) `HappyStk` happyRest} + +happyReduce_42 = happySpecReduce_1 18# happyReduction_42 +happyReduction_42 happy_x_1 + = happyIn22 + (True + ) + +happyReduce_43 = happySpecReduce_0 18# happyReduction_43 +happyReduction_43 = happyIn22 + (False + ) + +happyReduce_44 = happySpecReduce_3 19# happyReduction_44 +happyReduction_44 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut23 happy_x_1 of { happy_var_1 -> + case happyOut24 happy_x_3 of { happy_var_3 -> + happyIn23 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_45 = happySpecReduce_1 19# happyReduction_45 +happyReduction_45 happy_x_1 + = case happyOut24 happy_x_1 of { happy_var_1 -> + happyIn23 + ([happy_var_1] + )} + +happyReduce_46 = happySpecReduce_1 20# happyReduction_46 +happyReduction_46 happy_x_1 + = case happyOut148 happy_x_1 of { happy_var_1 -> + happyIn24 + (HsIVar happy_var_1 + )} + +happyReduce_47 = happySpecReduce_1 20# happyReduction_47 +happyReduction_47 happy_x_1 + = case happyOut181 happy_x_1 of { happy_var_1 -> + happyIn24 + (HsIAbs happy_var_1 + )} + +happyReduce_48 = happyReduce 4# 20# happyReduction_48 +happyReduction_48 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut181 happy_x_1 of { happy_var_1 -> + happyIn24 + (HsIThingAll happy_var_1 + ) `HappyStk` happyRest} + +happyReduce_49 = happySpecReduce_3 20# happyReduction_49 +happyReduction_49 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut181 happy_x_1 of { happy_var_1 -> + happyIn24 + (HsIThingWith happy_var_1 [] + )} + +happyReduce_50 = happyReduce 4# 20# happyReduction_50 +happyReduction_50 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut181 happy_x_1 of { happy_var_1 -> + case happyOut25 happy_x_3 of { happy_var_3 -> + happyIn24 + (HsIThingWith happy_var_1 (reverse happy_var_3) + ) `HappyStk` happyRest}} + +happyReduce_51 = happySpecReduce_3 21# happyReduction_51 +happyReduction_51 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOut26 happy_x_3 of { happy_var_3 -> + happyIn25 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_52 = happySpecReduce_1 21# happyReduction_52 +happyReduction_52 happy_x_1 + = case happyOut26 happy_x_1 of { happy_var_1 -> + happyIn25 + ([happy_var_1] + )} + +happyReduce_53 = happySpecReduce_1 22# happyReduction_53 +happyReduction_53 happy_x_1 + = case happyOut148 happy_x_1 of { happy_var_1 -> + happyIn26 + (HsVarName happy_var_1 + )} + +happyReduce_54 = happySpecReduce_1 22# happyReduction_54 +happyReduction_54 happy_x_1 + = case happyOut152 happy_x_1 of { happy_var_1 -> + happyIn26 + (HsConName happy_var_1 + )} + +happyReduce_55 = happyReduce 4# 23# happyReduction_55 +happyReduction_55 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut29 happy_x_2 of { happy_var_2 -> + case happyOut28 happy_x_3 of { happy_var_3 -> + case happyOut30 happy_x_4 of { happy_var_4 -> + happyIn27 + (HsInfixDecl happy_var_1 happy_var_2 happy_var_3 (reverse happy_var_4) + ) `HappyStk` happyRest}}}} + +happyReduce_56 = happySpecReduce_0 24# happyReduction_56 +happyReduction_56 = happyIn28 + (9 + ) + +happyReduce_57 = happyMonadReduce 1# 24# happyReduction_57 +happyReduction_57 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (IntTok happy_var_1) -> + ( checkPrec happy_var_1)} + ) (\r -> happyReturn (happyIn28 r)) + +happyReduce_58 = happySpecReduce_1 25# happyReduction_58 +happyReduction_58 happy_x_1 + = happyIn29 + (HsAssocNone + ) + +happyReduce_59 = happySpecReduce_1 25# happyReduction_59 +happyReduction_59 happy_x_1 + = happyIn29 + (HsAssocLeft + ) + +happyReduce_60 = happySpecReduce_1 25# happyReduction_60 +happyReduction_60 happy_x_1 + = happyIn29 + (HsAssocRight + ) + +happyReduce_61 = happySpecReduce_3 26# happyReduction_61 +happyReduction_61 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut30 happy_x_1 of { happy_var_1 -> + case happyOut159 happy_x_3 of { happy_var_3 -> + happyIn30 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_62 = happySpecReduce_1 26# happyReduction_62 +happyReduction_62 happy_x_1 + = case happyOut159 happy_x_1 of { happy_var_1 -> + happyIn30 + ([happy_var_1] + )} + +happyReduce_63 = happyMonadReduce 2# 27# happyReduction_63 +happyReduction_63 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> + ( checkRevDecls happy_var_1)} + ) (\r -> happyReturn (happyIn31 r)) + +happyReduce_64 = happySpecReduce_3 28# happyReduction_64 +happyReduction_64 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut32 happy_x_1 of { happy_var_1 -> + case happyOut33 happy_x_3 of { happy_var_3 -> + happyIn32 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_65 = happySpecReduce_1 28# happyReduction_65 +happyReduction_65 happy_x_1 + = case happyOut33 happy_x_1 of { happy_var_1 -> + happyIn32 + ([happy_var_1] + )} + +happyReduce_66 = happyMonadReduce 5# 29# happyReduction_66 +happyReduction_66 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + case happyOut52 happy_x_5 of { happy_var_5 -> + ( do { (c,ts) <- checkSimpleType happy_var_3; + return (HsTypeDecl happy_var_1 c ts happy_var_5) })}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_67 = happyMonadReduce 5# 29# happyReduction_67 +happyReduction_67 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_4 of { happy_var_4 -> + case happyOut82 happy_x_5 of { happy_var_5 -> + ( do { (c,ts) <- checkSimpleType happy_var_4; + return (HsTypeFamDecl happy_var_1 c ts happy_var_5) })}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_68 = happyMonadReduce 6# 29# happyReduction_68 +happyReduction_68 (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) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_4 of { happy_var_4 -> + case happyOut52 happy_x_6 of { happy_var_6 -> + ( do { -- no checkSimpleType happy_var_4 since dtype may contain type patterns + return (HsTypeInsDecl happy_var_1 happy_var_4 happy_var_6) })}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_69 = happyMonadReduce 5# 29# happyReduction_69 +happyReduction_69 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut34 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_3 of { happy_var_3 -> + case happyOut66 happy_x_4 of { happy_var_4 -> + case happyOut78 happy_x_5 of { happy_var_5 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_3; + checkDataOrNew happy_var_2 happy_var_4; + return (HsDataDecl happy_var_1 happy_var_2 cs c t (reverse happy_var_4) happy_var_5) })}}}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_70 = happyMonadReduce 6# 29# happyReduction_70 +happyReduction_70 (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) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut34 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_3 of { happy_var_3 -> + case happyOut82 happy_x_4 of { happy_var_4 -> + case happyOut62 happy_x_6 of { happy_var_6 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_3; + checkDataOrNew happy_var_2 happy_var_6; + return (HsGDataDecl happy_var_1 happy_var_2 cs c t happy_var_4 (reverse happy_var_6)) })}}}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_71 = happyMonadReduce 5# 29# happyReduction_71 +happyReduction_71 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut52 happy_x_4 of { happy_var_4 -> + case happyOut82 happy_x_5 of { happy_var_5 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_4; + return (HsDataFamDecl happy_var_1 cs c t happy_var_5) })}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_72 = happyMonadReduce 6# 29# happyReduction_72 +happyReduction_72 (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) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut34 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_4 of { happy_var_4 -> + case happyOut66 happy_x_5 of { happy_var_5 -> + case happyOut78 happy_x_6 of { happy_var_6 -> + ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; + checkDataOrNew happy_var_2 happy_var_5; + return (HsDataInsDecl happy_var_1 happy_var_2 happy_var_4 (reverse happy_var_5) happy_var_6) })}}}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_73 = happyMonadReduce 7# 29# happyReduction_73 +happyReduction_73 (happy_x_7 `HappyStk` + 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) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut34 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_4 of { happy_var_4 -> + case happyOut82 happy_x_5 of { happy_var_5 -> + case happyOut62 happy_x_7 of { happy_var_7 -> + ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; + checkDataOrNew happy_var_2 happy_var_7; + return (HsGDataInsDecl happy_var_1 happy_var_2 happy_var_4 happy_var_5 (reverse happy_var_7)) })}}}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_74 = happyMonadReduce 5# 29# happyReduction_74 +happyReduction_74 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut52 happy_x_3 of { happy_var_3 -> + case happyOut59 happy_x_4 of { happy_var_4 -> + case happyOut83 happy_x_5 of { happy_var_5 -> + ( do { (cs,c,vs) <- checkClassHeader happy_var_3; + return (HsClassDecl happy_var_1 cs c vs happy_var_4 happy_var_5) })}}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_75 = happyMonadReduce 4# 29# happyReduction_75 +happyReduction_75 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut52 happy_x_3 of { happy_var_3 -> + case happyOut89 happy_x_4 of { happy_var_4 -> + ( do { (cs,c,ts) <- checkInstHeader happy_var_3; + return (HsInstDecl happy_var_1 cs c ts happy_var_4) })}}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_76 = happyMonadReduce 4# 29# happyReduction_76 +happyReduction_76 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut52 happy_x_4 of { happy_var_4 -> + ( do { (cs, c, ts) <- checkInstHeader happy_var_4; + return (HsDerivDecl happy_var_1 cs c ts) })}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_77 = happyReduce 5# 29# happyReduction_77 +happyReduction_77 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut35 happy_x_4 of { happy_var_4 -> + happyIn33 + (HsDefaultDecl happy_var_1 happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_78 = happyMonadReduce 4# 29# happyReduction_78 +happyReduction_78 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + ( do { e <- checkExpr happy_var_3; + return $ HsSpliceDecl happy_var_1 $ HsParenSplice e })}} + ) (\r -> happyReturn (happyIn33 r)) + +happyReduce_79 = happyReduce 6# 29# happyReduction_79 +happyReduction_79 (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 happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_4 of { happy_var_4 -> + case happyOut44 happy_x_5 of { happy_var_5 -> + case happyOut45 happy_x_6 of { happy_var_6 -> + happyIn33 + (let (s,n,t) = happy_var_6 in HsForImp happy_var_1 happy_var_4 happy_var_5 s n t + ) `HappyStk` happyRest}}}} + +happyReduce_80 = happyReduce 5# 29# happyReduction_80 +happyReduction_80 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut43 happy_x_4 of { happy_var_4 -> + case happyOut45 happy_x_5 of { happy_var_5 -> + happyIn33 + (let (s,n,t) = happy_var_5 in HsForExp happy_var_1 happy_var_4 s n t + ) `HappyStk` happyRest}}} + +happyReduce_81 = happySpecReduce_1 29# happyReduction_81 +happyReduction_81 happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + happyIn33 + (happy_var_1 + )} + +happyReduce_82 = happySpecReduce_1 30# happyReduction_82 +happyReduction_82 happy_x_1 + = happyIn34 + (DataType + ) + +happyReduce_83 = happySpecReduce_1 30# happyReduction_83 +happyReduction_83 happy_x_1 + = happyIn34 + (NewType + ) + +happyReduce_84 = happySpecReduce_1 31# happyReduction_84 +happyReduction_84 happy_x_1 + = case happyOut54 happy_x_1 of { happy_var_1 -> + happyIn35 + (reverse happy_var_1 + )} + +happyReduce_85 = happySpecReduce_1 31# happyReduction_85 +happyReduction_85 happy_x_1 + = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn35 + ([happy_var_1] + )} + +happyReduce_86 = happySpecReduce_0 31# happyReduction_86 +happyReduction_86 = happyIn35 + ([] + ) + +happyReduce_87 = happyMonadReduce 3# 32# happyReduction_87 +happyReduction_87 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut37 happy_x_2 of { happy_var_2 -> + ( checkRevDecls happy_var_2)} + ) (\r -> happyReturn (happyIn36 r)) + +happyReduce_88 = happySpecReduce_1 32# happyReduction_88 +happyReduction_88 happy_x_1 + = happyIn36 + ([] + ) + +happyReduce_89 = happySpecReduce_3 33# happyReduction_89 +happyReduction_89 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut37 happy_x_1 of { happy_var_1 -> + case happyOut38 happy_x_3 of { happy_var_3 -> + happyIn37 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_90 = happySpecReduce_1 33# happyReduction_90 +happyReduction_90 happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + happyIn37 + ([happy_var_1] + )} + +happyReduce_91 = happySpecReduce_1 34# happyReduction_91 +happyReduction_91 happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + happyIn38 + (happy_var_1 + )} + +happyReduce_92 = happySpecReduce_1 34# happyReduction_92 +happyReduction_92 happy_x_1 + = case happyOut27 happy_x_1 of { happy_var_1 -> + happyIn38 + (happy_var_1 + )} + +happyReduce_93 = happySpecReduce_1 34# happyReduction_93 +happyReduction_93 happy_x_1 + = case happyOut94 happy_x_1 of { happy_var_1 -> + happyIn38 + (happy_var_1 + )} + +happyReduce_94 = happySpecReduce_3 35# happyReduction_94 +happyReduction_94 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn39 + (happy_var_2 + )} + +happyReduce_95 = happySpecReduce_3 35# happyReduction_95 +happyReduction_95 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut36 happy_x_2 of { happy_var_2 -> + happyIn39 + (happy_var_2 + )} + +happyReduce_96 = happyReduce 4# 36# happyReduction_96 +happyReduction_96 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut42 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_4 of { happy_var_4 -> + happyIn40 + (HsTypeSig happy_var_1 (reverse happy_var_2) happy_var_4 + ) `HappyStk` happyRest}}} + +happyReduce_97 = happySpecReduce_1 37# happyReduction_97 +happyReduction_97 happy_x_1 + = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn41 + (HsBDecls happy_var_1 + )} + +happyReduce_98 = happySpecReduce_3 37# happyReduction_98 +happyReduction_98 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut144 happy_x_2 of { happy_var_2 -> + happyIn41 + (HsIPBinds happy_var_2 + )} + +happyReduce_99 = happySpecReduce_3 37# happyReduction_99 +happyReduction_99 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut144 happy_x_2 of { happy_var_2 -> + happyIn41 + (HsIPBinds happy_var_2 + )} + +happyReduce_100 = happySpecReduce_3 38# happyReduction_100 +happyReduction_100 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOut148 happy_x_3 of { happy_var_3 -> + happyIn42 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_101 = happyMonadReduce 1# 38# happyReduction_101 +happyReduction_101 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut150 happy_x_1 of { happy_var_1 -> + ( do { n <- checkUnQual happy_var_1; + return [n] })} + ) (\r -> happyReturn (happyIn42 r)) + +happyReduce_102 = happySpecReduce_1 39# happyReduction_102 +happyReduction_102 happy_x_1 + = happyIn43 + (StdCall + ) + +happyReduce_103 = happySpecReduce_1 39# happyReduction_103 +happyReduction_103 happy_x_1 + = happyIn43 + (CCall + ) + +happyReduce_104 = happySpecReduce_1 40# happyReduction_104 +happyReduction_104 happy_x_1 + = happyIn44 + (PlaySafe False + ) + +happyReduce_105 = happySpecReduce_1 40# happyReduction_105 +happyReduction_105 happy_x_1 + = happyIn44 + (PlayRisky + ) + +happyReduce_106 = happySpecReduce_1 40# happyReduction_106 +happyReduction_106 happy_x_1 + = happyIn44 + (PlaySafe True + ) + +happyReduce_107 = happySpecReduce_0 40# happyReduction_107 +happyReduction_107 = happyIn44 + (PlaySafe False + ) + +happyReduce_108 = happyReduce 4# 41# happyReduction_108 +happyReduction_108 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (StringTok happy_var_1) -> + case happyOut149 happy_x_2 of { happy_var_2 -> + case happyOut46 happy_x_4 of { happy_var_4 -> + happyIn45 + ((happy_var_1, happy_var_2, happy_var_4) + ) `HappyStk` happyRest}}} + +happyReduce_109 = happySpecReduce_3 41# happyReduction_109 +happyReduction_109 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut149 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn45 + (("", happy_var_1, happy_var_3) + )}} + +happyReduce_110 = happySpecReduce_1 42# happyReduction_110 +happyReduction_110 happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + happyIn46 + (happy_var_1 + )} + +happyReduce_111 = happySpecReduce_3 42# happyReduction_111 +happyReduction_111 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOut51 happy_x_2 of { happy_var_2 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn46 + (HsTyInfix happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_112 = happySpecReduce_3 42# happyReduction_112 +happyReduction_112 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOut185 happy_x_2 of { happy_var_2 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn46 + (HsTyInfix happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_113 = happySpecReduce_3 42# happyReduction_113 +happyReduction_113 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn46 + (HsTyFun happy_var_1 happy_var_3 + )}} + +happyReduce_114 = happySpecReduce_3 43# happyReduction_114 +happyReduction_114 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut151 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn47 + (HsTyPred $ HsIParam happy_var_1 happy_var_3 + )}} + +happyReduce_115 = happySpecReduce_1 43# happyReduction_115 +happyReduction_115 happy_x_1 + = case happyOut46 happy_x_1 of { happy_var_1 -> + happyIn47 + (happy_var_1 + )} + +happyReduce_116 = happySpecReduce_2 44# happyReduction_116 +happyReduction_116 happy_x_2 + happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn48 + (HsTyApp happy_var_1 happy_var_2 + )}} + +happyReduce_117 = happySpecReduce_1 44# happyReduction_117 +happyReduction_117 happy_x_1 + = case happyOut49 happy_x_1 of { happy_var_1 -> + happyIn48 + (happy_var_1 + )} + +happyReduce_118 = happySpecReduce_1 45# happyReduction_118 +happyReduction_118 happy_x_1 + = case happyOut50 happy_x_1 of { happy_var_1 -> + happyIn49 + (HsTyCon happy_var_1 + )} + +happyReduce_119 = happySpecReduce_1 45# happyReduction_119 +happyReduction_119 happy_x_1 + = case happyOut184 happy_x_1 of { happy_var_1 -> + happyIn49 + (HsTyVar happy_var_1 + )} + +happyReduce_120 = happySpecReduce_3 45# happyReduction_120 +happyReduction_120 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut54 happy_x_2 of { happy_var_2 -> + happyIn49 + (HsTyTuple Boxed (reverse happy_var_2) + )} + +happyReduce_121 = happySpecReduce_3 45# happyReduction_121 +happyReduction_121 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut55 happy_x_2 of { happy_var_2 -> + happyIn49 + (HsTyTuple Unboxed (reverse happy_var_2) + )} + +happyReduce_122 = happySpecReduce_3 45# happyReduction_122 +happyReduction_122 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut47 happy_x_2 of { happy_var_2 -> + happyIn49 + (HsTyApp list_tycon happy_var_2 + )} + +happyReduce_123 = happySpecReduce_3 45# happyReduction_123 +happyReduction_123 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut52 happy_x_2 of { happy_var_2 -> + happyIn49 + (happy_var_2 + )} + +happyReduce_124 = happyReduce 5# 45# happyReduction_124 +happyReduction_124 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut52 happy_x_2 of { happy_var_2 -> + case happyOut80 happy_x_4 of { happy_var_4 -> + happyIn49 + (HsTyKind happy_var_2 happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_125 = happySpecReduce_1 46# happyReduction_125 +happyReduction_125 happy_x_1 + = case happyOut167 happy_x_1 of { happy_var_1 -> + happyIn50 + (happy_var_1 + )} + +happyReduce_126 = happySpecReduce_2 46# happyReduction_126 +happyReduction_126 happy_x_2 + happy_x_1 + = happyIn50 + (unit_tycon_name + ) + +happyReduce_127 = happySpecReduce_3 46# happyReduction_127 +happyReduction_127 happy_x_3 + happy_x_2 + happy_x_1 + = happyIn50 + (fun_tycon_name + ) + +happyReduce_128 = happySpecReduce_2 46# happyReduction_128 +happyReduction_128 happy_x_2 + happy_x_1 + = happyIn50 + (list_tycon_name + ) + +happyReduce_129 = happySpecReduce_3 46# happyReduction_129 +happyReduction_129 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut113 happy_x_2 of { happy_var_2 -> + happyIn50 + (tuple_tycon_name happy_var_2 + )} + +happyReduce_130 = happySpecReduce_1 47# happyReduction_130 +happyReduction_130 happy_x_1 + = case happyOut158 happy_x_1 of { happy_var_1 -> + happyIn51 + (happy_var_1 + )} + +happyReduce_131 = happyReduce 4# 48# happyReduction_131 +happyReduction_131 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut56 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_4 of { happy_var_4 -> + happyIn52 + (mkHsTyForall (Just happy_var_2) [] happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_132 = happySpecReduce_3 48# happyReduction_132 +happyReduction_132 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut53 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + happyIn52 + (mkHsTyForall Nothing happy_var_1 happy_var_3 + )}} + +happyReduce_133 = happySpecReduce_1 48# happyReduction_133 +happyReduction_133 happy_x_1 + = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn52 + (happy_var_1 + )} + +happyReduce_134 = happyMonadReduce 1# 49# happyReduction_134 +happyReduction_134 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut48 happy_x_1 of { happy_var_1 -> + ( checkContext happy_var_1)} + ) (\r -> happyReturn (happyIn53 r)) + +happyReduce_135 = happySpecReduce_3 50# happyReduction_135 +happyReduction_135 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut55 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + happyIn54 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_136 = happySpecReduce_1 51# happyReduction_136 +happyReduction_136 happy_x_1 + = case happyOut47 happy_x_1 of { happy_var_1 -> + happyIn55 + ([happy_var_1] + )} + +happyReduce_137 = happySpecReduce_3 51# happyReduction_137 +happyReduction_137 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut55 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + happyIn55 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_138 = happySpecReduce_2 52# happyReduction_138 +happyReduction_138 happy_x_2 + happy_x_1 + = case happyOut56 happy_x_1 of { happy_var_1 -> + case happyOut57 happy_x_2 of { happy_var_2 -> + happyIn56 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_139 = happySpecReduce_0 52# happyReduction_139 +happyReduction_139 = happyIn56 + ([] + ) + +happyReduce_140 = happySpecReduce_1 53# happyReduction_140 +happyReduction_140 happy_x_1 + = case happyOut184 happy_x_1 of { happy_var_1 -> + happyIn57 + (HsUnkindedVar happy_var_1 + )} + +happyReduce_141 = happyReduce 5# 53# happyReduction_141 +happyReduction_141 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut184 happy_x_2 of { happy_var_2 -> + case happyOut80 happy_x_4 of { happy_var_4 -> + happyIn57 + (HsKindedVar happy_var_2 happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_142 = happySpecReduce_2 54# happyReduction_142 +happyReduction_142 happy_x_2 + happy_x_1 + = case happyOut58 happy_x_1 of { happy_var_1 -> + case happyOut184 happy_x_2 of { happy_var_2 -> + happyIn58 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_143 = happySpecReduce_0 54# happyReduction_143 +happyReduction_143 = happyIn58 + ([] + ) + +happyReduce_144 = happySpecReduce_0 55# happyReduction_144 +happyReduction_144 = happyIn59 + ([] + ) + +happyReduce_145 = happySpecReduce_2 55# happyReduction_145 +happyReduction_145 happy_x_2 + happy_x_1 + = case happyOut60 happy_x_2 of { happy_var_2 -> + happyIn59 + (reverse happy_var_2 + )} + +happyReduce_146 = happySpecReduce_3 56# happyReduction_146 +happyReduction_146 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut60 happy_x_1 of { happy_var_1 -> + case happyOut61 happy_x_3 of { happy_var_3 -> + happyIn60 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_147 = happySpecReduce_1 56# happyReduction_147 +happyReduction_147 happy_x_1 + = case happyOut61 happy_x_1 of { happy_var_1 -> + happyIn60 + ([happy_var_1] + )} + +happyReduce_148 = happySpecReduce_3 57# happyReduction_148 +happyReduction_148 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut58 happy_x_1 of { happy_var_1 -> + case happyOut58 happy_x_3 of { happy_var_3 -> + happyIn61 + (HsFunDep (reverse happy_var_1) (reverse happy_var_3) + )}} + +happyReduce_149 = happySpecReduce_3 58# happyReduction_149 +happyReduction_149 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut63 happy_x_2 of { happy_var_2 -> + happyIn62 + (happy_var_2 + )} + +happyReduce_150 = happySpecReduce_3 58# happyReduction_150 +happyReduction_150 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut63 happy_x_2 of { happy_var_2 -> + happyIn62 + (happy_var_2 + )} + +happyReduce_151 = happySpecReduce_3 59# happyReduction_151 +happyReduction_151 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut64 happy_x_2 of { happy_var_2 -> + happyIn63 + (happy_var_2 + )} + +happyReduce_152 = happySpecReduce_3 60# happyReduction_152 +happyReduction_152 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut64 happy_x_1 of { happy_var_1 -> + case happyOut65 happy_x_3 of { happy_var_3 -> + happyIn64 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_153 = happySpecReduce_1 60# happyReduction_153 +happyReduction_153 happy_x_1 + = case happyOut65 happy_x_1 of { happy_var_1 -> + happyIn64 + ([happy_var_1] + )} + +happyReduce_154 = happyMonadReduce 4# 61# happyReduction_154 +happyReduction_154 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut153 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_4 of { happy_var_4 -> + ( do { c <- checkUnQual happy_var_2; + return $ HsGadtDecl happy_var_1 c happy_var_4 })}}} + ) (\r -> happyReturn (happyIn65 r)) + +happyReduce_155 = happySpecReduce_0 62# happyReduction_155 +happyReduction_155 = happyIn66 + ([] + ) + +happyReduce_156 = happySpecReduce_2 62# happyReduction_156 +happyReduction_156 happy_x_2 + happy_x_1 + = case happyOut67 happy_x_2 of { happy_var_2 -> + happyIn66 + (happy_var_2 + )} + +happyReduce_157 = happySpecReduce_3 63# happyReduction_157 +happyReduction_157 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut67 happy_x_1 of { happy_var_1 -> + case happyOut68 happy_x_3 of { happy_var_3 -> + happyIn67 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_158 = happySpecReduce_1 63# happyReduction_158 +happyReduction_158 happy_x_1 + = case happyOut68 happy_x_1 of { happy_var_1 -> + happyIn67 + ([happy_var_1] + )} + +happyReduce_159 = happyReduce 5# 64# happyReduction_159 +happyReduction_159 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut69 happy_x_2 of { happy_var_2 -> + case happyOut53 happy_x_3 of { happy_var_3 -> + case happyOut70 happy_x_5 of { happy_var_5 -> + happyIn68 + (HsQualConDecl happy_var_1 happy_var_2 happy_var_3 happy_var_5 + ) `HappyStk` happyRest}}}} + +happyReduce_160 = happySpecReduce_3 64# happyReduction_160 +happyReduction_160 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut69 happy_x_2 of { happy_var_2 -> + case happyOut70 happy_x_3 of { happy_var_3 -> + happyIn68 + (HsQualConDecl happy_var_1 happy_var_2 [] happy_var_3 + )}}} + +happyReduce_161 = happySpecReduce_3 65# happyReduction_161 +happyReduction_161 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut56 happy_x_2 of { happy_var_2 -> + happyIn69 + (happy_var_2 + )} + +happyReduce_162 = happySpecReduce_0 65# happyReduction_162 +happyReduction_162 = happyIn69 + ([] + ) + +happyReduce_163 = happySpecReduce_1 66# happyReduction_163 +happyReduction_163 happy_x_1 + = case happyOut71 happy_x_1 of { happy_var_1 -> + happyIn70 + (HsConDecl (fst happy_var_1) (snd happy_var_1) + )} + +happyReduce_164 = happySpecReduce_3 66# happyReduction_164 +happyReduction_164 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut74 happy_x_1 of { happy_var_1 -> + case happyOut157 happy_x_2 of { happy_var_2 -> + case happyOut74 happy_x_3 of { happy_var_3 -> + happyIn70 + (HsConDecl happy_var_2 [happy_var_1,happy_var_3] + )}}} + +happyReduce_165 = happySpecReduce_3 66# happyReduction_165 +happyReduction_165 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut152 happy_x_1 of { happy_var_1 -> + happyIn70 + (HsRecDecl happy_var_1 [] + )} + +happyReduce_166 = happyReduce 4# 66# happyReduction_166 +happyReduction_166 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut152 happy_x_1 of { happy_var_1 -> + case happyOut75 happy_x_3 of { happy_var_3 -> + happyIn70 + (HsRecDecl happy_var_1 (reverse happy_var_3) + ) `HappyStk` happyRest}} + +happyReduce_167 = happyMonadReduce 1# 67# happyReduction_167 +happyReduction_167 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut48 happy_x_1 of { happy_var_1 -> + ( do { (c,ts) <- splitTyConApp happy_var_1; + return (c,map HsUnBangedTy ts) })} + ) (\r -> happyReturn (happyIn71 r)) + +happyReduce_168 = happySpecReduce_1 67# happyReduction_168 +happyReduction_168 happy_x_1 + = case happyOut72 happy_x_1 of { happy_var_1 -> + happyIn71 + (happy_var_1 + )} + +happyReduce_169 = happyMonadReduce 3# 68# happyReduction_169 +happyReduction_169 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut48 happy_x_1 of { happy_var_1 -> + case happyOut49 happy_x_3 of { happy_var_3 -> + ( do { (c,ts) <- splitTyConApp happy_var_1; + return (c,map HsUnBangedTy ts++ + [HsBangedTy happy_var_3]) })}} + ) (\r -> happyReturn (happyIn72 r)) + +happyReduce_170 = happySpecReduce_2 68# happyReduction_170 +happyReduction_170 happy_x_2 + happy_x_1 + = case happyOut72 happy_x_1 of { happy_var_1 -> + case happyOut73 happy_x_2 of { happy_var_2 -> + happyIn72 + ((fst happy_var_1, snd happy_var_1 ++ [happy_var_2] ) + )}} + +happyReduce_171 = happySpecReduce_1 69# happyReduction_171 +happyReduction_171 happy_x_1 + = case happyOut49 happy_x_1 of { happy_var_1 -> + happyIn73 + (HsUnBangedTy happy_var_1 + )} + +happyReduce_172 = happySpecReduce_2 69# happyReduction_172 +happyReduction_172 happy_x_2 + happy_x_1 + = case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn73 + (HsBangedTy happy_var_2 + )} + +happyReduce_173 = happySpecReduce_1 70# happyReduction_173 +happyReduction_173 happy_x_1 + = case happyOut48 happy_x_1 of { happy_var_1 -> + happyIn74 + (HsUnBangedTy happy_var_1 + )} + +happyReduce_174 = happySpecReduce_2 70# happyReduction_174 +happyReduction_174 happy_x_2 + happy_x_1 + = case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn74 + (HsBangedTy happy_var_2 + )} + +happyReduce_175 = happySpecReduce_3 71# happyReduction_175 +happyReduction_175 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut75 happy_x_1 of { happy_var_1 -> + case happyOut76 happy_x_3 of { happy_var_3 -> + happyIn75 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_176 = happySpecReduce_1 71# happyReduction_176 +happyReduction_176 happy_x_1 + = case happyOut76 happy_x_1 of { happy_var_1 -> + happyIn75 + ([happy_var_1] + )} + +happyReduce_177 = happySpecReduce_3 72# happyReduction_177 +happyReduction_177 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOut77 happy_x_3 of { happy_var_3 -> + happyIn76 + ((reverse happy_var_1, happy_var_3) + )}} + +happyReduce_178 = happySpecReduce_1 73# happyReduction_178 +happyReduction_178 happy_x_1 + = case happyOut52 happy_x_1 of { happy_var_1 -> + happyIn77 + (HsUnBangedTy happy_var_1 + )} + +happyReduce_179 = happySpecReduce_2 73# happyReduction_179 +happyReduction_179 happy_x_2 + happy_x_1 + = case happyOut49 happy_x_2 of { happy_var_2 -> + happyIn77 + (HsBangedTy happy_var_2 + )} + +happyReduce_180 = happySpecReduce_0 74# happyReduction_180 +happyReduction_180 = happyIn78 + ([] + ) + +happyReduce_181 = happySpecReduce_2 74# happyReduction_181 +happyReduction_181 happy_x_2 + happy_x_1 + = case happyOut183 happy_x_2 of { happy_var_2 -> + happyIn78 + ([happy_var_2] + )} + +happyReduce_182 = happySpecReduce_3 74# happyReduction_182 +happyReduction_182 happy_x_3 + happy_x_2 + happy_x_1 + = happyIn78 + ([] + ) + +happyReduce_183 = happyReduce 4# 74# happyReduction_183 +happyReduction_183 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut79 happy_x_3 of { happy_var_3 -> + happyIn78 + (reverse happy_var_3 + ) `HappyStk` happyRest} + +happyReduce_184 = happySpecReduce_3 75# happyReduction_184 +happyReduction_184 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut79 happy_x_1 of { happy_var_1 -> + case happyOut183 happy_x_3 of { happy_var_3 -> + happyIn79 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_185 = happySpecReduce_1 75# happyReduction_185 +happyReduction_185 happy_x_1 + = case happyOut183 happy_x_1 of { happy_var_1 -> + happyIn79 + ([happy_var_1] + )} + +happyReduce_186 = happySpecReduce_1 76# happyReduction_186 +happyReduction_186 happy_x_1 + = case happyOut81 happy_x_1 of { happy_var_1 -> + happyIn80 + (happy_var_1 + )} + +happyReduce_187 = happySpecReduce_3 76# happyReduction_187 +happyReduction_187 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut81 happy_x_1 of { happy_var_1 -> + case happyOut80 happy_x_3 of { happy_var_3 -> + happyIn80 + (HsKindFn happy_var_1 happy_var_3 + )}} + +happyReduce_188 = happySpecReduce_1 77# happyReduction_188 +happyReduction_188 happy_x_1 + = happyIn81 + (HsKindStar + ) + +happyReduce_189 = happySpecReduce_1 77# happyReduction_189 +happyReduction_189 happy_x_1 + = happyIn81 + (HsKindBang + ) + +happyReduce_190 = happySpecReduce_3 77# happyReduction_190 +happyReduction_190 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut80 happy_x_2 of { happy_var_2 -> + happyIn81 + (happy_var_2 + )} + +happyReduce_191 = happySpecReduce_0 78# happyReduction_191 +happyReduction_191 = happyIn82 + (Nothing + ) + +happyReduce_192 = happySpecReduce_2 78# happyReduction_192 +happyReduction_192 happy_x_2 + happy_x_1 + = case happyOut80 happy_x_2 of { happy_var_2 -> + happyIn82 + (Just happy_var_2 + )} + +happyReduce_193 = happyMonadReduce 2# 79# happyReduction_193 +happyReduction_193 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut84 happy_x_2 of { happy_var_2 -> + ( checkClassBody happy_var_2)} + ) (\r -> happyReturn (happyIn83 r)) + +happyReduce_194 = happySpecReduce_0 79# happyReduction_194 +happyReduction_194 = happyIn83 + ([] + ) + +happyReduce_195 = happySpecReduce_3 80# happyReduction_195 +happyReduction_195 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut85 happy_x_2 of { happy_var_2 -> + happyIn84 + (happy_var_2 + )} + +happyReduce_196 = happySpecReduce_3 80# happyReduction_196 +happyReduction_196 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut85 happy_x_2 of { happy_var_2 -> + happyIn84 + (happy_var_2 + )} + +happyReduce_197 = happyMonadReduce 3# 81# happyReduction_197 +happyReduction_197 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut86 happy_x_2 of { happy_var_2 -> + ( checkRevClsDecls happy_var_2)} + ) (\r -> happyReturn (happyIn85 r)) + +happyReduce_198 = happySpecReduce_1 81# happyReduction_198 +happyReduction_198 happy_x_1 + = happyIn85 + ([] + ) + +happyReduce_199 = happySpecReduce_3 82# happyReduction_199 +happyReduction_199 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut86 happy_x_1 of { happy_var_1 -> + case happyOut87 happy_x_3 of { happy_var_3 -> + happyIn86 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_200 = happySpecReduce_1 82# happyReduction_200 +happyReduction_200 happy_x_1 + = case happyOut87 happy_x_1 of { happy_var_1 -> + happyIn86 + ([happy_var_1] + )} + +happyReduce_201 = happySpecReduce_1 83# happyReduction_201 +happyReduction_201 happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + happyIn87 + (HsClsDecl happy_var_1 + )} + +happyReduce_202 = happySpecReduce_1 83# happyReduction_202 +happyReduction_202 happy_x_1 + = case happyOut88 happy_x_1 of { happy_var_1 -> + happyIn87 + (happy_var_1 + )} + +happyReduce_203 = happyMonadReduce 4# 84# happyReduction_203 +happyReduction_203 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut47 happy_x_3 of { happy_var_3 -> + case happyOut82 happy_x_4 of { happy_var_4 -> + ( do { (c,ts) <- checkSimpleType happy_var_3; + return (HsClsTyFam happy_var_1 c ts happy_var_4) })}}} + ) (\r -> happyReturn (happyIn88 r)) + +happyReduce_204 = happyReduce 5# 84# happyReduction_204 +happyReduction_204 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + case happyOut52 happy_x_5 of { happy_var_5 -> + happyIn88 + (HsClsTyDef happy_var_1 happy_var_3 happy_var_5 + ) `HappyStk` happyRest}}} + +happyReduce_205 = happyMonadReduce 4# 84# happyReduction_205 +happyReduction_205 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut52 happy_x_3 of { happy_var_3 -> + case happyOut82 happy_x_4 of { happy_var_4 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_3; + return (HsClsDataFam happy_var_1 cs c t happy_var_4) })}}} + ) (\r -> happyReturn (happyIn88 r)) + +happyReduce_206 = happyMonadReduce 4# 85# happyReduction_206 +happyReduction_206 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut90 happy_x_3 of { happy_var_3 -> + ( checkInstBody happy_var_3)} + ) (\r -> happyReturn (happyIn89 r)) + +happyReduce_207 = happyMonadReduce 4# 85# happyReduction_207 +happyReduction_207 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut90 happy_x_3 of { happy_var_3 -> + ( checkInstBody happy_var_3)} + ) (\r -> happyReturn (happyIn89 r)) + +happyReduce_208 = happySpecReduce_0 85# happyReduction_208 +happyReduction_208 = happyIn89 + ([] + ) + +happyReduce_209 = happyMonadReduce 3# 86# happyReduction_209 +happyReduction_209 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut91 happy_x_2 of { happy_var_2 -> + ( checkRevInstDecls happy_var_2)} + ) (\r -> happyReturn (happyIn90 r)) + +happyReduce_210 = happySpecReduce_1 86# happyReduction_210 +happyReduction_210 happy_x_1 + = happyIn90 + ([] + ) + +happyReduce_211 = happySpecReduce_3 87# happyReduction_211 +happyReduction_211 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut91 happy_x_1 of { happy_var_1 -> + case happyOut92 happy_x_3 of { happy_var_3 -> + happyIn91 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_212 = happySpecReduce_1 87# happyReduction_212 +happyReduction_212 happy_x_1 + = case happyOut92 happy_x_1 of { happy_var_1 -> + happyIn91 + ([happy_var_1] + )} + +happyReduce_213 = happySpecReduce_1 88# happyReduction_213 +happyReduction_213 happy_x_1 + = case happyOut94 happy_x_1 of { happy_var_1 -> + happyIn92 + (HsInsDecl happy_var_1 + )} + +happyReduce_214 = happySpecReduce_1 88# happyReduction_214 +happyReduction_214 happy_x_1 + = case happyOut93 happy_x_1 of { happy_var_1 -> + happyIn92 + (happy_var_1 + )} + +happyReduce_215 = happyMonadReduce 5# 89# happyReduction_215 +happyReduction_215 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { happy_var_4 -> + case happyOut52 happy_x_5 of { happy_var_5 -> + ( do { -- no checkSimpleType happy_var_4 since dtype may contain type patterns + return (HsInsType happy_var_1 happy_var_3 happy_var_5) })}}}} + ) (\r -> happyReturn (happyIn93 r)) + +happyReduce_216 = happyMonadReduce 5# 89# happyReduction_216 +happyReduction_216 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut34 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_3 of { happy_var_3 -> + case happyOut66 happy_x_4 of { happy_var_4 -> + case happyOut78 happy_x_5 of { happy_var_5 -> + ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; + checkDataOrNew happy_var_2 happy_var_4; + return (HsInsData happy_var_1 happy_var_2 happy_var_3 (reverse happy_var_4) happy_var_5) })}}}}} + ) (\r -> happyReturn (happyIn93 r)) + +happyReduce_217 = happyMonadReduce 6# 89# happyReduction_217 +happyReduction_217 (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) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut34 happy_x_2 of { happy_var_2 -> + case happyOut52 happy_x_3 of { happy_var_3 -> + case happyOut82 happy_x_4 of { happy_var_4 -> + case happyOut62 happy_x_6 of { happy_var_6 -> + ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; + checkDataOrNew happy_var_2 happy_var_6; + return (HsInsGData happy_var_1 happy_var_2 happy_var_3 happy_var_4 (reverse happy_var_6)) })}}}}} + ) (\r -> happyReturn (happyIn93 r)) + +happyReduce_218 = happyMonadReduce 4# 90# happyReduction_218 +happyReduction_218 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut102 happy_x_2 of { happy_var_2 -> + case happyOut96 happy_x_3 of { happy_var_3 -> + case happyOut95 happy_x_4 of { happy_var_4 -> + ( checkValDef happy_var_1 happy_var_2 happy_var_3 happy_var_4)}}}} + ) (\r -> happyReturn (happyIn94 r)) + +happyReduce_219 = happySpecReduce_2 91# happyReduction_219 +happyReduction_219 happy_x_2 + happy_x_1 + = case happyOut41 happy_x_2 of { happy_var_2 -> + happyIn95 + (happy_var_2 + )} + +happyReduce_220 = happySpecReduce_0 91# happyReduction_220 +happyReduction_220 = happyIn95 + (HsBDecls [] + ) + +happyReduce_221 = happyMonadReduce 2# 92# happyReduction_221 +happyReduction_221 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut99 happy_x_2 of { happy_var_2 -> + ( do { e <- checkExpr happy_var_2; + return (HsUnGuardedRhs e) })} + ) (\r -> happyReturn (happyIn96 r)) + +happyReduce_222 = happySpecReduce_1 92# happyReduction_222 +happyReduction_222 happy_x_1 + = case happyOut97 happy_x_1 of { happy_var_1 -> + happyIn96 + (HsGuardedRhss (reverse happy_var_1) + )} + +happyReduce_223 = happySpecReduce_2 93# happyReduction_223 +happyReduction_223 happy_x_2 + happy_x_1 + = case happyOut97 happy_x_1 of { happy_var_1 -> + case happyOut98 happy_x_2 of { happy_var_2 -> + happyIn97 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_224 = happySpecReduce_1 93# happyReduction_224 +happyReduction_224 happy_x_1 + = case happyOut98 happy_x_1 of { happy_var_1 -> + happyIn97 + ([happy_var_1] + )} + +happyReduce_225 = happyMonadReduce 5# 94# happyReduction_225 +happyReduction_225 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut129 happy_x_3 of { happy_var_3 -> + case happyOut99 happy_x_5 of { happy_var_5 -> + ( do { e <- checkExpr happy_var_5; + return (HsGuardedRhs happy_var_1 (reverse happy_var_3) e) })}}} + ) (\r -> happyReturn (happyIn98 r)) + +happyReduce_226 = happyReduce 4# 95# happyReduction_226 +happyReduction_226 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut177 happy_x_3 of { happy_var_3 -> + case happyOut52 happy_x_4 of { happy_var_4 -> + happyIn99 + (HsExpTypeSig happy_var_3 happy_var_1 happy_var_4 + ) `HappyStk` happyRest}}} + +happyReduce_227 = happySpecReduce_3 95# happyReduction_227 +happyReduction_227 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut143 happy_x_3 of { happy_var_3 -> + happyIn99 + (HsWith happy_var_1 happy_var_3 + )}} + +happyReduce_228 = happySpecReduce_1 95# happyReduction_228 +happyReduction_228 happy_x_1 + = case happyOut100 happy_x_1 of { happy_var_1 -> + happyIn99 + (happy_var_1 + )} + +happyReduce_229 = happySpecReduce_1 96# happyReduction_229 +happyReduction_229 happy_x_1 + = case happyOut101 happy_x_1 of { happy_var_1 -> + happyIn100 + (happy_var_1 + )} + +happyReduce_230 = happySpecReduce_1 96# happyReduction_230 +happyReduction_230 happy_x_1 + = case happyOut102 happy_x_1 of { happy_var_1 -> + happyIn100 + (happy_var_1 + )} + +happyReduce_231 = happySpecReduce_3 97# happyReduction_231 +happyReduction_231 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut160 happy_x_2 of { happy_var_2 -> + case happyOut103 happy_x_3 of { happy_var_3 -> + happyIn101 + (HsInfixApp happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_232 = happySpecReduce_1 97# happyReduction_232 +happyReduction_232 happy_x_1 + = case happyOut103 happy_x_1 of { happy_var_1 -> + happyIn101 + (happy_var_1 + )} + +happyReduce_233 = happySpecReduce_3 98# happyReduction_233 +happyReduction_233 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut160 happy_x_2 of { happy_var_2 -> + case happyOut104 happy_x_3 of { happy_var_3 -> + happyIn102 + (HsInfixApp happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_234 = happySpecReduce_1 98# happyReduction_234 +happyReduction_234 happy_x_1 + = case happyOut126 happy_x_1 of { happy_var_1 -> + happyIn102 + (happy_var_1 + )} + +happyReduce_235 = happySpecReduce_1 98# happyReduction_235 +happyReduction_235 happy_x_1 + = case happyOut104 happy_x_1 of { happy_var_1 -> + happyIn102 + (happy_var_1 + )} + +happyReduce_236 = happyReduce 5# 99# happyReduction_236 +happyReduction_236 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_2 of { happy_var_2 -> + case happyOut106 happy_x_3 of { happy_var_3 -> + case happyOut99 happy_x_5 of { happy_var_5 -> + happyIn103 + (HsLambda happy_var_2 (reverse happy_var_3) happy_var_5 + ) `HappyStk` happyRest}}} + +happyReduce_237 = happyReduce 4# 99# happyReduction_237 +happyReduction_237 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut41 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_4 of { happy_var_4 -> + happyIn103 + (HsLet happy_var_2 happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_238 = happyReduce 4# 99# happyReduction_238 +happyReduction_238 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut143 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_4 of { happy_var_4 -> + happyIn103 + (HsDLet happy_var_2 happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_239 = happyReduce 6# 99# happyReduction_239 +happyReduction_239 (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 happyOut99 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_4 of { happy_var_4 -> + case happyOut99 happy_x_6 of { happy_var_6 -> + happyIn103 + (HsIf happy_var_2 happy_var_4 happy_var_6 + ) `HappyStk` happyRest}}} + +happyReduce_240 = happyReduce 4# 100# happyReduction_240 +happyReduction_240 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut99 happy_x_2 of { happy_var_2 -> + case happyOut131 happy_x_4 of { happy_var_4 -> + happyIn104 + (HsCase happy_var_2 happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_241 = happySpecReduce_2 100# happyReduction_241 +happyReduction_241 happy_x_2 + happy_x_1 + = case happyOut105 happy_x_2 of { happy_var_2 -> + happyIn104 + (HsNegApp happy_var_2 + )} + +happyReduce_242 = happySpecReduce_2 100# happyReduction_242 +happyReduction_242 happy_x_2 + happy_x_1 + = case happyOut139 happy_x_2 of { happy_var_2 -> + happyIn104 + (HsDo happy_var_2 + )} + +happyReduce_243 = happySpecReduce_2 100# happyReduction_243 +happyReduction_243 happy_x_2 + happy_x_1 + = case happyOut139 happy_x_2 of { happy_var_2 -> + happyIn104 + (HsMDo happy_var_2 + )} + +happyReduce_244 = happySpecReduce_1 100# happyReduction_244 +happyReduction_244 happy_x_1 + = case happyOut111 happy_x_1 of { happy_var_1 -> + happyIn104 + (HsReifyExp happy_var_1 + )} + +happyReduce_245 = happySpecReduce_1 100# happyReduction_245 +happyReduction_245 happy_x_1 + = case happyOut105 happy_x_1 of { happy_var_1 -> + happyIn104 + (happy_var_1 + )} + +happyReduce_246 = happySpecReduce_2 101# happyReduction_246 +happyReduction_246 happy_x_2 + happy_x_1 + = case happyOut105 happy_x_1 of { happy_var_1 -> + case happyOut108 happy_x_2 of { happy_var_2 -> + happyIn105 + (HsApp happy_var_1 happy_var_2 + )}} + +happyReduce_247 = happySpecReduce_1 101# happyReduction_247 +happyReduction_247 happy_x_1 + = case happyOut108 happy_x_1 of { happy_var_1 -> + happyIn105 + (happy_var_1 + )} + +happyReduce_248 = happySpecReduce_2 102# happyReduction_248 +happyReduction_248 happy_x_2 + happy_x_1 + = case happyOut106 happy_x_1 of { happy_var_1 -> + case happyOut107 happy_x_2 of { happy_var_2 -> + happyIn106 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_249 = happySpecReduce_1 102# happyReduction_249 +happyReduction_249 happy_x_1 + = case happyOut107 happy_x_1 of { happy_var_1 -> + happyIn106 + ([happy_var_1] + )} + +happyReduce_250 = happyMonadReduce 1# 103# happyReduction_250 +happyReduction_250 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut108 happy_x_1 of { happy_var_1 -> + ( checkPattern happy_var_1)} + ) (\r -> happyReturn (happyIn107 r)) + +happyReduce_251 = happyMonadReduce 3# 104# happyReduction_251 +happyReduction_251 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOut108 happy_x_3 of { happy_var_3 -> + ( do { n <- checkUnQual happy_var_1; + return (HsAsPat n happy_var_3) })}} + ) (\r -> happyReturn (happyIn108 r)) + +happyReduce_252 = happyMonadReduce 3# 104# happyReduction_252 +happyReduction_252 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOut108 happy_x_3 of { happy_var_3 -> + ( do { n <- checkUnQual happy_var_1; + return (HsCAsRP n happy_var_3) })}} + ) (\r -> happyReturn (happyIn108 r)) + +happyReduce_253 = happySpecReduce_2 104# happyReduction_253 +happyReduction_253 happy_x_2 + happy_x_1 + = case happyOut108 happy_x_2 of { happy_var_2 -> + happyIn108 + (HsIrrPat happy_var_2 + )} + +happyReduce_254 = happySpecReduce_1 104# happyReduction_254 +happyReduction_254 happy_x_1 + = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn108 + (happy_var_1 + )} + +happyReduce_255 = happyMonadReduce 3# 105# happyReduction_255 +happyReduction_255 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut109 happy_x_1 of { happy_var_1 -> + ( mkRecConstrOrUpdate happy_var_1 [])} + ) (\r -> happyReturn (happyIn109 r)) + +happyReduce_256 = happyMonadReduce 4# 105# happyReduction_256 +happyReduction_256 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut109 happy_x_1 of { happy_var_1 -> + case happyOut141 happy_x_3 of { happy_var_3 -> + ( mkRecConstrOrUpdate happy_var_1 (reverse happy_var_3))}} + ) (\r -> happyReturn (happyIn109 r)) + +happyReduce_257 = happySpecReduce_2 105# happyReduction_257 +happyReduction_257 happy_x_2 + happy_x_1 + = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn109 + (HsStarRP happy_var_1 + )} + +happyReduce_258 = happySpecReduce_2 105# happyReduction_258 +happyReduction_258 happy_x_2 + happy_x_1 + = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn109 + (HsStarGRP happy_var_1 + )} + +happyReduce_259 = happySpecReduce_2 105# happyReduction_259 +happyReduction_259 happy_x_2 + happy_x_1 + = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn109 + (HsPlusRP happy_var_1 + )} + +happyReduce_260 = happySpecReduce_2 105# happyReduction_260 +happyReduction_260 happy_x_2 + happy_x_1 + = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn109 + (HsPlusGRP happy_var_1 + )} + +happyReduce_261 = happySpecReduce_2 105# happyReduction_261 +happyReduction_261 happy_x_2 + happy_x_1 + = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn109 + (HsOptRP happy_var_1 + )} + +happyReduce_262 = happySpecReduce_2 105# happyReduction_262 +happyReduction_262 happy_x_2 + happy_x_1 + = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn109 + (HsOptGRP happy_var_1 + )} + +happyReduce_263 = happySpecReduce_1 105# happyReduction_263 +happyReduction_263 happy_x_1 + = case happyOut110 happy_x_1 of { happy_var_1 -> + happyIn109 + (happy_var_1 + )} + +happyReduce_264 = happySpecReduce_1 106# happyReduction_264 +happyReduction_264 happy_x_1 + = case happyOut151 happy_x_1 of { happy_var_1 -> + happyIn110 + (HsIPVar happy_var_1 + )} + +happyReduce_265 = happySpecReduce_1 106# happyReduction_265 +happyReduction_265 happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + happyIn110 + (HsVar happy_var_1 + )} + +happyReduce_266 = happySpecReduce_1 106# happyReduction_266 +happyReduction_266 happy_x_1 + = case happyOut147 happy_x_1 of { happy_var_1 -> + happyIn110 + (happy_var_1 + )} + +happyReduce_267 = happySpecReduce_1 106# happyReduction_267 +happyReduction_267 happy_x_1 + = case happyOut176 happy_x_1 of { happy_var_1 -> + happyIn110 + (HsLit happy_var_1 + )} + +happyReduce_268 = happySpecReduce_3 106# happyReduction_268 +happyReduction_268 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn110 + (HsParen happy_var_2 + )} + +happyReduce_269 = happySpecReduce_3 106# happyReduction_269 +happyReduction_269 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut114 happy_x_2 of { happy_var_2 -> + happyIn110 + (HsTuple (reverse happy_var_2) + )} + +happyReduce_270 = happySpecReduce_3 106# happyReduction_270 +happyReduction_270 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut127 happy_x_2 of { happy_var_2 -> + happyIn110 + (happy_var_2 + )} + +happyReduce_271 = happyReduce 4# 106# happyReduction_271 +happyReduction_271 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut102 happy_x_2 of { happy_var_2 -> + case happyOut160 happy_x_3 of { happy_var_3 -> + happyIn110 + (HsLeftSection happy_var_2 happy_var_3 + ) `HappyStk` happyRest}} + +happyReduce_272 = happyReduce 4# 106# happyReduction_272 +happyReduction_272 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut161 happy_x_2 of { happy_var_2 -> + case happyOut100 happy_x_3 of { happy_var_3 -> + happyIn110 + (HsRightSection happy_var_2 happy_var_3 + ) `HappyStk` happyRest}} + +happyReduce_273 = happySpecReduce_1 106# happyReduction_273 +happyReduction_273 happy_x_1 + = happyIn110 + (HsWildCard + ) + +happyReduce_274 = happySpecReduce_3 106# happyReduction_274 +happyReduction_274 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut117 happy_x_2 of { happy_var_2 -> + happyIn110 + (happy_var_2 + )} + +happyReduce_275 = happySpecReduce_3 106# happyReduction_275 +happyReduction_275 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut115 happy_x_2 of { happy_var_2 -> + happyIn110 + (HsSeqRP $ reverse happy_var_2 + )} + +happyReduce_276 = happyReduce 4# 106# happyReduction_276 +happyReduction_276 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut115 happy_x_3 of { happy_var_3 -> + happyIn110 + (HsRPats happy_var_1 $ reverse happy_var_3 + ) `HappyStk` happyRest}} + +happyReduce_277 = happySpecReduce_1 106# happyReduction_277 +happyReduction_277 happy_x_1 + = case happyOut118 happy_x_1 of { happy_var_1 -> + happyIn110 + (happy_var_1 + )} + +happyReduce_278 = happySpecReduce_1 106# happyReduction_278 +happyReduction_278 happy_x_1 + = case happyOutTok happy_x_1 of { (THIdEscape happy_var_1) -> + happyIn110 + (HsSpliceExp $ HsIdSplice happy_var_1 + )} + +happyReduce_279 = happyMonadReduce 3# 106# happyReduction_279 +happyReduction_279 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut99 happy_x_2 of { happy_var_2 -> + ( do { e <- checkExpr happy_var_2; + return $ HsSpliceExp $ HsParenSplice e })} + ) (\r -> happyReturn (happyIn110 r)) + +happyReduce_280 = happyMonadReduce 3# 106# happyReduction_280 +happyReduction_280 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut99 happy_x_2 of { happy_var_2 -> + ( do { e <- checkExpr happy_var_2; + return $ HsBracketExp $ HsExpBracket e })} + ) (\r -> happyReturn (happyIn110 r)) + +happyReduce_281 = happyMonadReduce 3# 106# happyReduction_281 +happyReduction_281 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut100 happy_x_2 of { happy_var_2 -> + ( do { p <- checkPattern happy_var_2; + return $ HsBracketExp $ HsPatBracket p })} + ) (\r -> happyReturn (happyIn110 r)) + +happyReduce_282 = happySpecReduce_3 106# happyReduction_282 +happyReduction_282 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut52 happy_x_2 of { happy_var_2 -> + happyIn110 + (HsBracketExp $ HsTypeBracket happy_var_2 + )} + +happyReduce_283 = happyReduce 5# 106# happyReduction_283 +happyReduction_283 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut31 happy_x_3 of { happy_var_3 -> + happyIn110 + (HsBracketExp $ HsDeclBracket happy_var_3 + ) `HappyStk` happyRest} + +happyReduce_284 = happySpecReduce_2 107# happyReduction_284 +happyReduction_284 happy_x_2 + happy_x_1 + = case happyOut50 happy_x_2 of { happy_var_2 -> + happyIn111 + (HsReifyDecl happy_var_2 + )} + +happyReduce_285 = happySpecReduce_2 107# happyReduction_285 +happyReduction_285 happy_x_2 + happy_x_1 + = case happyOut150 happy_x_2 of { happy_var_2 -> + happyIn111 + (HsReifyDecl happy_var_2 + )} + +happyReduce_286 = happySpecReduce_2 107# happyReduction_286 +happyReduction_286 happy_x_2 + happy_x_1 + = case happyOut112 happy_x_2 of { happy_var_2 -> + happyIn111 + (HsReifyType happy_var_2 + )} + +happyReduce_287 = happySpecReduce_2 107# happyReduction_287 +happyReduction_287 happy_x_2 + happy_x_1 + = case happyOut112 happy_x_2 of { happy_var_2 -> + happyIn111 + (HsReifyFixity happy_var_2 + )} + +happyReduce_288 = happySpecReduce_1 108# happyReduction_288 +happyReduction_288 happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + happyIn112 + (happy_var_1 + )} + +happyReduce_289 = happyMonadReduce 1# 108# happyReduction_289 +happyReduction_289 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut147 happy_x_1 of { happy_var_1 -> + ( getGConName happy_var_1)} + ) (\r -> happyReturn (happyIn112 r)) + +happyReduce_290 = happySpecReduce_2 109# happyReduction_290 +happyReduction_290 happy_x_2 + happy_x_1 + = case happyOut113 happy_x_1 of { happy_var_1 -> + happyIn113 + (happy_var_1 + 1 + )} + +happyReduce_291 = happySpecReduce_1 109# happyReduction_291 +happyReduction_291 happy_x_1 + = happyIn113 + (1 + ) + +happyReduce_292 = happySpecReduce_3 110# happyReduction_292 +happyReduction_292 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut114 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn114 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_293 = happySpecReduce_3 110# happyReduction_293 +happyReduction_293 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn114 + ([happy_var_3,happy_var_1] + )}} + +happyReduce_294 = happySpecReduce_3 111# happyReduction_294 +happyReduction_294 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut115 happy_x_1 of { happy_var_1 -> + case happyOut116 happy_x_3 of { happy_var_3 -> + happyIn115 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_295 = happySpecReduce_1 111# happyReduction_295 +happyReduction_295 happy_x_1 + = case happyOut116 happy_x_1 of { happy_var_1 -> + happyIn115 + ([happy_var_1] + )} + +happyReduce_296 = happySpecReduce_1 112# happyReduction_296 +happyReduction_296 happy_x_1 + = case happyOut117 happy_x_1 of { happy_var_1 -> + happyIn116 + (happy_var_1 + )} + +happyReduce_297 = happySpecReduce_1 112# happyReduction_297 +happyReduction_297 happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + happyIn116 + (happy_var_1 + )} + +happyReduce_298 = happySpecReduce_3 113# happyReduction_298 +happyReduction_298 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut117 happy_x_3 of { happy_var_3 -> + happyIn117 + (HsEitherRP happy_var_1 happy_var_3 + )}} + +happyReduce_299 = happySpecReduce_3 113# happyReduction_299 +happyReduction_299 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn117 + (HsEitherRP happy_var_1 happy_var_3 + )}} + +happyReduce_300 = happyMonadReduce 10# 114# happyReduction_300 +happyReduction_300 (happy_x_10 `HappyStk` + happy_x_9 `HappyStk` + happy_x_8 `HappyStk` + happy_x_7 `HappyStk` + 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) tk + = happyThen (case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut121 happy_x_3 of { happy_var_3 -> + case happyOut123 happy_x_4 of { happy_var_4 -> + case happyOut125 happy_x_5 of { happy_var_5 -> + case happyOut119 happy_x_7 of { happy_var_7 -> + case happyOut121 happy_x_9 of { happy_var_9 -> + ( do { n <- checkEqNames happy_var_3 happy_var_9; + let { cn = reverse happy_var_7; + as = reverse happy_var_4; }; + return $ HsXTag happy_var_1 n as happy_var_5 cn })}}}}}} + ) (\r -> happyReturn (happyIn118 r)) + +happyReduce_301 = happyReduce 6# 114# happyReduction_301 +happyReduction_301 (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 happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut121 happy_x_3 of { happy_var_3 -> + case happyOut123 happy_x_4 of { happy_var_4 -> + case happyOut125 happy_x_5 of { happy_var_5 -> + happyIn118 + (HsXETag happy_var_1 happy_var_3 (reverse happy_var_4) happy_var_5 + ) `HappyStk` happyRest}}}} + +happyReduce_302 = happySpecReduce_3 114# happyReduction_302 +happyReduction_302 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn118 + (HsXExpTag happy_var_2 + )} + +happyReduce_303 = happySpecReduce_2 115# happyReduction_303 +happyReduction_303 happy_x_2 + happy_x_1 + = case happyOut119 happy_x_1 of { happy_var_1 -> + case happyOut120 happy_x_2 of { happy_var_2 -> + happyIn119 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_304 = happySpecReduce_0 115# happyReduction_304 +happyReduction_304 = happyIn119 + ([] + ) + +happyReduce_305 = happySpecReduce_1 116# happyReduction_305 +happyReduction_305 happy_x_1 + = case happyOutTok happy_x_1 of { (XPcdata happy_var_1) -> + happyIn120 + (HsXPcdata happy_var_1 + )} + +happyReduce_306 = happyReduce 4# 116# happyReduction_306 +happyReduction_306 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut115 happy_x_3 of { happy_var_3 -> + happyIn120 + (HsRPats happy_var_1 $ reverse happy_var_3 + ) `HappyStk` happyRest}} + +happyReduce_307 = happySpecReduce_1 116# happyReduction_307 +happyReduction_307 happy_x_1 + = case happyOut118 happy_x_1 of { happy_var_1 -> + happyIn120 + (happy_var_1 + )} + +happyReduce_308 = happySpecReduce_3 117# happyReduction_308 +happyReduction_308 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut122 happy_x_1 of { happy_var_1 -> + case happyOut122 happy_x_3 of { happy_var_3 -> + happyIn121 + (HsXDomName happy_var_1 happy_var_3 + )}} + +happyReduce_309 = happySpecReduce_1 117# happyReduction_309 +happyReduction_309 happy_x_1 + = case happyOut122 happy_x_1 of { happy_var_1 -> + happyIn121 + (HsXName happy_var_1 + )} + +happyReduce_310 = happySpecReduce_1 118# happyReduction_310 +happyReduction_310 happy_x_1 + = case happyOutTok happy_x_1 of { (VarId happy_var_1) -> + happyIn122 + (happy_var_1 + )} + +happyReduce_311 = happySpecReduce_1 118# happyReduction_311 +happyReduction_311 happy_x_1 + = case happyOutTok happy_x_1 of { (ConId happy_var_1) -> + happyIn122 + (happy_var_1 + )} + +happyReduce_312 = happySpecReduce_1 118# happyReduction_312 +happyReduction_312 happy_x_1 + = case happyOutTok happy_x_1 of { (DVarId happy_var_1) -> + happyIn122 + (mkDVar happy_var_1 + )} + +happyReduce_313 = happySpecReduce_1 118# happyReduction_313 +happyReduction_313 happy_x_1 + = happyIn122 + ("type" + ) + +happyReduce_314 = happySpecReduce_1 118# happyReduction_314 +happyReduction_314 happy_x_1 + = happyIn122 + ("class" + ) + +happyReduce_315 = happySpecReduce_2 119# happyReduction_315 +happyReduction_315 happy_x_2 + happy_x_1 + = case happyOut123 happy_x_1 of { happy_var_1 -> + case happyOut124 happy_x_2 of { happy_var_2 -> + happyIn123 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_316 = happySpecReduce_0 119# happyReduction_316 +happyReduction_316 = happyIn123 + ([] + ) + +happyReduce_317 = happySpecReduce_3 120# happyReduction_317 +happyReduction_317 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut121 happy_x_1 of { happy_var_1 -> + case happyOut108 happy_x_3 of { happy_var_3 -> + happyIn124 + (HsXAttr happy_var_1 happy_var_3 + )}} + +happyReduce_318 = happySpecReduce_1 121# happyReduction_318 +happyReduction_318 happy_x_1 + = case happyOut108 happy_x_1 of { happy_var_1 -> + happyIn125 + (Just happy_var_1 + )} + +happyReduce_319 = happySpecReduce_0 121# happyReduction_319 +happyReduction_319 = happyIn125 + (Nothing + ) + +happyReduce_320 = happySpecReduce_1 122# happyReduction_320 +happyReduction_320 happy_x_1 + = case happyOutTok happy_x_1 of { (DVarId happy_var_1) -> + happyIn126 + (mkDVarExpr happy_var_1 + )} + +happyReduce_321 = happySpecReduce_1 123# happyReduction_321 +happyReduction_321 happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + happyIn127 + (HsList [happy_var_1] + )} + +happyReduce_322 = happySpecReduce_1 123# happyReduction_322 +happyReduction_322 happy_x_1 + = case happyOut128 happy_x_1 of { happy_var_1 -> + happyIn127 + (HsList (reverse happy_var_1) + )} + +happyReduce_323 = happySpecReduce_2 123# happyReduction_323 +happyReduction_323 happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + happyIn127 + (HsEnumFrom happy_var_1 + )} + +happyReduce_324 = happyReduce 4# 123# happyReduction_324 +happyReduction_324 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn127 + (HsEnumFromThen happy_var_1 happy_var_3 + ) `HappyStk` happyRest}} + +happyReduce_325 = happySpecReduce_3 123# happyReduction_325 +happyReduction_325 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn127 + (HsEnumFromTo happy_var_1 happy_var_3 + )}} + +happyReduce_326 = happyReduce 5# 123# happyReduction_326 +happyReduction_326 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + case happyOut99 happy_x_5 of { happy_var_5 -> + happyIn127 + (HsEnumFromThenTo happy_var_1 happy_var_3 happy_var_5 + ) `HappyStk` happyRest}}} + +happyReduce_327 = happySpecReduce_3 123# happyReduction_327 +happyReduction_327 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut129 happy_x_3 of { happy_var_3 -> + happyIn127 + (HsListComp happy_var_1 (reverse happy_var_3) + )}} + +happyReduce_328 = happySpecReduce_3 124# happyReduction_328 +happyReduction_328 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut128 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn128 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_329 = happySpecReduce_3 124# happyReduction_329 +happyReduction_329 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn128 + ([happy_var_3,happy_var_1] + )}} + +happyReduce_330 = happySpecReduce_3 125# happyReduction_330 +happyReduction_330 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut129 happy_x_1 of { happy_var_1 -> + case happyOut130 happy_x_3 of { happy_var_3 -> + happyIn129 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_331 = happySpecReduce_1 125# happyReduction_331 +happyReduction_331 happy_x_1 + = case happyOut130 happy_x_1 of { happy_var_1 -> + happyIn129 + ([happy_var_1] + )} + +happyReduce_332 = happyReduce 4# 126# happyReduction_332 +happyReduction_332 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut138 happy_x_1 of { happy_var_1 -> + case happyOut177 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_4 of { happy_var_4 -> + happyIn130 + (HsGenerator happy_var_2 happy_var_1 happy_var_4 + ) `HappyStk` happyRest}}} + +happyReduce_333 = happySpecReduce_1 126# happyReduction_333 +happyReduction_333 happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + happyIn130 + (HsQualifier happy_var_1 + )} + +happyReduce_334 = happySpecReduce_2 126# happyReduction_334 +happyReduction_334 happy_x_2 + happy_x_1 + = case happyOut41 happy_x_2 of { happy_var_2 -> + happyIn130 + (HsLetStmt happy_var_2 + )} + +happyReduce_335 = happySpecReduce_3 127# happyReduction_335 +happyReduction_335 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut132 happy_x_2 of { happy_var_2 -> + happyIn131 + (happy_var_2 + )} + +happyReduce_336 = happySpecReduce_3 127# happyReduction_336 +happyReduction_336 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut132 happy_x_2 of { happy_var_2 -> + happyIn131 + (happy_var_2 + )} + +happyReduce_337 = happySpecReduce_3 128# happyReduction_337 +happyReduction_337 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut133 happy_x_2 of { happy_var_2 -> + happyIn132 + (reverse happy_var_2 + )} + +happyReduce_338 = happySpecReduce_3 129# happyReduction_338 +happyReduction_338 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut133 happy_x_1 of { happy_var_1 -> + case happyOut134 happy_x_3 of { happy_var_3 -> + happyIn133 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_339 = happySpecReduce_1 129# happyReduction_339 +happyReduction_339 happy_x_1 + = case happyOut134 happy_x_1 of { happy_var_1 -> + happyIn133 + ([happy_var_1] + )} + +happyReduce_340 = happyReduce 4# 130# happyReduction_340 +happyReduction_340 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut138 happy_x_2 of { happy_var_2 -> + case happyOut135 happy_x_3 of { happy_var_3 -> + case happyOut95 happy_x_4 of { happy_var_4 -> + happyIn134 + (HsAlt happy_var_1 happy_var_2 happy_var_3 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_341 = happySpecReduce_2 131# happyReduction_341 +happyReduction_341 happy_x_2 + happy_x_1 + = case happyOut99 happy_x_2 of { happy_var_2 -> + happyIn135 + (HsUnGuardedAlt happy_var_2 + )} + +happyReduce_342 = happySpecReduce_1 131# happyReduction_342 +happyReduction_342 happy_x_1 + = case happyOut136 happy_x_1 of { happy_var_1 -> + happyIn135 + (HsGuardedAlts (reverse happy_var_1) + )} + +happyReduce_343 = happySpecReduce_2 132# happyReduction_343 +happyReduction_343 happy_x_2 + happy_x_1 + = case happyOut136 happy_x_1 of { happy_var_1 -> + case happyOut137 happy_x_2 of { happy_var_2 -> + happyIn136 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_344 = happySpecReduce_1 132# happyReduction_344 +happyReduction_344 happy_x_1 + = case happyOut137 happy_x_1 of { happy_var_1 -> + happyIn136 + ([happy_var_1] + )} + +happyReduce_345 = happyReduce 5# 133# happyReduction_345 +happyReduction_345 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut129 happy_x_3 of { happy_var_3 -> + case happyOut99 happy_x_5 of { happy_var_5 -> + happyIn137 + (HsGuardedAlt happy_var_1 (reverse happy_var_3) happy_var_5 + ) `HappyStk` happyRest}}} + +happyReduce_346 = happyMonadReduce 1# 134# happyReduction_346 +happyReduction_346 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut102 happy_x_1 of { happy_var_1 -> + ( checkPattern happy_var_1)} + ) (\r -> happyReturn (happyIn138 r)) + +happyReduce_347 = happySpecReduce_3 135# happyReduction_347 +happyReduction_347 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut140 happy_x_2 of { happy_var_2 -> + happyIn139 + (happy_var_2 + )} + +happyReduce_348 = happySpecReduce_3 135# happyReduction_348 +happyReduction_348 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut140 happy_x_2 of { happy_var_2 -> + happyIn139 + (happy_var_2 + )} + +happyReduce_349 = happyReduce 4# 136# happyReduction_349 +happyReduction_349 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut41 happy_x_2 of { happy_var_2 -> + case happyOut140 happy_x_4 of { happy_var_4 -> + happyIn140 + (HsLetStmt happy_var_2 : happy_var_4 + ) `HappyStk` happyRest}} + +happyReduce_350 = happyReduce 6# 136# happyReduction_350 +happyReduction_350 (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 happyOut138 happy_x_1 of { happy_var_1 -> + case happyOut177 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_4 of { happy_var_4 -> + case happyOut140 happy_x_6 of { happy_var_6 -> + happyIn140 + (HsGenerator happy_var_2 happy_var_1 happy_var_4 : happy_var_6 + ) `HappyStk` happyRest}}}} + +happyReduce_351 = happySpecReduce_3 136# happyReduction_351 +happyReduction_351 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + case happyOut140 happy_x_3 of { happy_var_3 -> + happyIn140 + (HsQualifier happy_var_1 : happy_var_3 + )}} + +happyReduce_352 = happySpecReduce_2 136# happyReduction_352 +happyReduction_352 happy_x_2 + happy_x_1 + = case happyOut140 happy_x_2 of { happy_var_2 -> + happyIn140 + (happy_var_2 + )} + +happyReduce_353 = happySpecReduce_2 136# happyReduction_353 +happyReduction_353 happy_x_2 + happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + happyIn140 + ([HsQualifier happy_var_1] + )} + +happyReduce_354 = happySpecReduce_1 136# happyReduction_354 +happyReduction_354 happy_x_1 + = case happyOut99 happy_x_1 of { happy_var_1 -> + happyIn140 + ([HsQualifier happy_var_1] + )} + +happyReduce_355 = happySpecReduce_3 137# happyReduction_355 +happyReduction_355 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut141 happy_x_1 of { happy_var_1 -> + case happyOut142 happy_x_3 of { happy_var_3 -> + happyIn141 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_356 = happySpecReduce_1 137# happyReduction_356 +happyReduction_356 happy_x_1 + = case happyOut142 happy_x_1 of { happy_var_1 -> + happyIn141 + ([happy_var_1] + )} + +happyReduce_357 = happySpecReduce_3 138# happyReduction_357 +happyReduction_357 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + happyIn142 + (HsFieldUpdate happy_var_1 happy_var_3 + )}} + +happyReduce_358 = happySpecReduce_3 139# happyReduction_358 +happyReduction_358 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut144 happy_x_2 of { happy_var_2 -> + happyIn143 + (happy_var_2 + )} + +happyReduce_359 = happySpecReduce_3 139# happyReduction_359 +happyReduction_359 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut144 happy_x_2 of { happy_var_2 -> + happyIn143 + (happy_var_2 + )} + +happyReduce_360 = happySpecReduce_3 140# happyReduction_360 +happyReduction_360 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut145 happy_x_2 of { happy_var_2 -> + happyIn144 + (reverse happy_var_2 + )} + +happyReduce_361 = happySpecReduce_3 141# happyReduction_361 +happyReduction_361 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut145 happy_x_1 of { happy_var_1 -> + case happyOut146 happy_x_3 of { happy_var_3 -> + happyIn145 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_362 = happySpecReduce_1 141# happyReduction_362 +happyReduction_362 happy_x_1 + = case happyOut146 happy_x_1 of { happy_var_1 -> + happyIn145 + ([happy_var_1] + )} + +happyReduce_363 = happyReduce 4# 142# happyReduction_363 +happyReduction_363 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut177 happy_x_1 of { happy_var_1 -> + case happyOut151 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_4 of { happy_var_4 -> + happyIn146 + (HsIPBind happy_var_1 happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}} + +happyReduce_364 = happySpecReduce_2 143# happyReduction_364 +happyReduction_364 happy_x_2 + happy_x_1 + = happyIn147 + (unit_con + ) + +happyReduce_365 = happySpecReduce_2 143# happyReduction_365 +happyReduction_365 happy_x_2 + happy_x_1 + = happyIn147 + (HsList [] + ) + +happyReduce_366 = happySpecReduce_3 143# happyReduction_366 +happyReduction_366 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut113 happy_x_2 of { happy_var_2 -> + happyIn147 + (tuple_con happy_var_2 + )} + +happyReduce_367 = happySpecReduce_1 143# happyReduction_367 +happyReduction_367 happy_x_1 + = case happyOut153 happy_x_1 of { happy_var_1 -> + happyIn147 + (HsCon happy_var_1 + )} + +happyReduce_368 = happySpecReduce_1 144# happyReduction_368 +happyReduction_368 happy_x_1 + = case happyOut165 happy_x_1 of { happy_var_1 -> + happyIn148 + (happy_var_1 + )} + +happyReduce_369 = happySpecReduce_3 144# happyReduction_369 +happyReduction_369 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut173 happy_x_2 of { happy_var_2 -> + happyIn148 + (happy_var_2 + )} + +happyReduce_370 = happySpecReduce_1 145# happyReduction_370 +happyReduction_370 happy_x_1 + = case happyOut164 happy_x_1 of { happy_var_1 -> + happyIn149 + (happy_var_1 + )} + +happyReduce_371 = happySpecReduce_3 145# happyReduction_371 +happyReduction_371 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut173 happy_x_2 of { happy_var_2 -> + happyIn149 + (happy_var_2 + )} + +happyReduce_372 = happySpecReduce_1 146# happyReduction_372 +happyReduction_372 happy_x_1 + = case happyOut163 happy_x_1 of { happy_var_1 -> + happyIn150 + (happy_var_1 + )} + +happyReduce_373 = happySpecReduce_3 146# happyReduction_373 +happyReduction_373 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut171 happy_x_2 of { happy_var_2 -> + happyIn150 + (happy_var_2 + )} + +happyReduce_374 = happySpecReduce_1 147# happyReduction_374 +happyReduction_374 happy_x_1 + = case happyOut166 happy_x_1 of { happy_var_1 -> + happyIn151 + (happy_var_1 + )} + +happyReduce_375 = happySpecReduce_1 148# happyReduction_375 +happyReduction_375 happy_x_1 + = case happyOut168 happy_x_1 of { happy_var_1 -> + happyIn152 + (happy_var_1 + )} + +happyReduce_376 = happySpecReduce_3 148# happyReduction_376 +happyReduction_376 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut170 happy_x_2 of { happy_var_2 -> + happyIn152 + (happy_var_2 + )} + +happyReduce_377 = happySpecReduce_1 149# happyReduction_377 +happyReduction_377 happy_x_1 + = case happyOut167 happy_x_1 of { happy_var_1 -> + happyIn153 + (happy_var_1 + )} + +happyReduce_378 = happySpecReduce_3 149# happyReduction_378 +happyReduction_378 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut162 happy_x_2 of { happy_var_2 -> + happyIn153 + (happy_var_2 + )} + +happyReduce_379 = happySpecReduce_1 150# happyReduction_379 +happyReduction_379 happy_x_1 + = case happyOut173 happy_x_1 of { happy_var_1 -> + happyIn154 + (happy_var_1 + )} + +happyReduce_380 = happySpecReduce_3 150# happyReduction_380 +happyReduction_380 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut165 happy_x_2 of { happy_var_2 -> + happyIn154 + (happy_var_2 + )} + +happyReduce_381 = happySpecReduce_1 151# happyReduction_381 +happyReduction_381 happy_x_1 + = case happyOut171 happy_x_1 of { happy_var_1 -> + happyIn155 + (happy_var_1 + )} + +happyReduce_382 = happySpecReduce_3 151# happyReduction_382 +happyReduction_382 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut163 happy_x_2 of { happy_var_2 -> + happyIn155 + (happy_var_2 + )} + +happyReduce_383 = happySpecReduce_1 152# happyReduction_383 +happyReduction_383 happy_x_1 + = case happyOut172 happy_x_1 of { happy_var_1 -> + happyIn156 + (happy_var_1 + )} + +happyReduce_384 = happySpecReduce_3 152# happyReduction_384 +happyReduction_384 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut163 happy_x_2 of { happy_var_2 -> + happyIn156 + (happy_var_2 + )} + +happyReduce_385 = happySpecReduce_1 153# happyReduction_385 +happyReduction_385 happy_x_1 + = case happyOut170 happy_x_1 of { happy_var_1 -> + happyIn157 + (happy_var_1 + )} + +happyReduce_386 = happySpecReduce_3 153# happyReduction_386 +happyReduction_386 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut168 happy_x_2 of { happy_var_2 -> + happyIn157 + (happy_var_2 + )} + +happyReduce_387 = happySpecReduce_1 154# happyReduction_387 +happyReduction_387 happy_x_1 + = case happyOut162 happy_x_1 of { happy_var_1 -> + happyIn158 + (happy_var_1 + )} + +happyReduce_388 = happySpecReduce_3 154# happyReduction_388 +happyReduction_388 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut167 happy_x_2 of { happy_var_2 -> + happyIn158 + (happy_var_2 + )} + +happyReduce_389 = happySpecReduce_1 155# happyReduction_389 +happyReduction_389 happy_x_1 + = case happyOut154 happy_x_1 of { happy_var_1 -> + happyIn159 + (HsVarOp happy_var_1 + )} + +happyReduce_390 = happySpecReduce_1 155# happyReduction_390 +happyReduction_390 happy_x_1 + = case happyOut157 happy_x_1 of { happy_var_1 -> + happyIn159 + (HsConOp happy_var_1 + )} + +happyReduce_391 = happySpecReduce_1 156# happyReduction_391 +happyReduction_391 happy_x_1 + = case happyOut155 happy_x_1 of { happy_var_1 -> + happyIn160 + (HsQVarOp happy_var_1 + )} + +happyReduce_392 = happySpecReduce_1 156# happyReduction_392 +happyReduction_392 happy_x_1 + = case happyOut158 happy_x_1 of { happy_var_1 -> + happyIn160 + (HsQConOp happy_var_1 + )} + +happyReduce_393 = happySpecReduce_1 157# happyReduction_393 +happyReduction_393 happy_x_1 + = case happyOut156 happy_x_1 of { happy_var_1 -> + happyIn161 + (HsQVarOp happy_var_1 + )} + +happyReduce_394 = happySpecReduce_1 157# happyReduction_394 +happyReduction_394 happy_x_1 + = case happyOut158 happy_x_1 of { happy_var_1 -> + happyIn161 + (HsQConOp happy_var_1 + )} + +happyReduce_395 = happySpecReduce_1 158# happyReduction_395 +happyReduction_395 happy_x_1 + = happyIn162 + (list_cons_name + ) + +happyReduce_396 = happySpecReduce_1 158# happyReduction_396 +happyReduction_396 happy_x_1 + = case happyOut169 happy_x_1 of { happy_var_1 -> + happyIn162 + (happy_var_1 + )} + +happyReduce_397 = happySpecReduce_1 159# happyReduction_397 +happyReduction_397 happy_x_1 + = case happyOut165 happy_x_1 of { happy_var_1 -> + happyIn163 + (UnQual happy_var_1 + )} + +happyReduce_398 = happySpecReduce_1 159# happyReduction_398 +happyReduction_398 happy_x_1 + = case happyOutTok happy_x_1 of { (QVarId happy_var_1) -> + happyIn163 + (Qual (Module (fst happy_var_1)) (HsIdent (snd happy_var_1)) + )} + +happyReduce_399 = happySpecReduce_1 160# happyReduction_399 +happyReduction_399 happy_x_1 + = case happyOutTok happy_x_1 of { (VarId happy_var_1) -> + happyIn164 + (HsIdent happy_var_1 + )} + +happyReduce_400 = happySpecReduce_1 160# happyReduction_400 +happyReduction_400 happy_x_1 + = happyIn164 + (as_name + ) + +happyReduce_401 = happySpecReduce_1 160# happyReduction_401 +happyReduction_401 happy_x_1 + = happyIn164 + (qualified_name + ) + +happyReduce_402 = happySpecReduce_1 160# happyReduction_402 +happyReduction_402 happy_x_1 + = happyIn164 + (hiding_name + ) + +happyReduce_403 = happySpecReduce_1 160# happyReduction_403 +happyReduction_403 happy_x_1 + = happyIn164 + (export_name + ) + +happyReduce_404 = happySpecReduce_1 160# happyReduction_404 +happyReduction_404 happy_x_1 + = happyIn164 + (stdcall_name + ) + +happyReduce_405 = happySpecReduce_1 160# happyReduction_405 +happyReduction_405 happy_x_1 + = happyIn164 + (ccall_name + ) + +happyReduce_406 = happySpecReduce_1 161# happyReduction_406 +happyReduction_406 happy_x_1 + = case happyOut164 happy_x_1 of { happy_var_1 -> + happyIn165 + (happy_var_1 + )} + +happyReduce_407 = happySpecReduce_1 161# happyReduction_407 +happyReduction_407 happy_x_1 + = happyIn165 + (safe_name + ) + +happyReduce_408 = happySpecReduce_1 161# happyReduction_408 +happyReduction_408 happy_x_1 + = happyIn165 + (unsafe_name + ) + +happyReduce_409 = happySpecReduce_1 161# happyReduction_409 +happyReduction_409 happy_x_1 + = happyIn165 + (threadsafe_name + ) + +happyReduce_410 = happySpecReduce_1 162# happyReduction_410 +happyReduction_410 happy_x_1 + = case happyOutTok happy_x_1 of { (IDupVarId happy_var_1) -> + happyIn166 + (HsIPDup happy_var_1 + )} + +happyReduce_411 = happySpecReduce_1 162# happyReduction_411 +happyReduction_411 happy_x_1 + = case happyOutTok happy_x_1 of { (ILinVarId happy_var_1) -> + happyIn166 + (HsIPLin happy_var_1 + )} + +happyReduce_412 = happySpecReduce_1 163# happyReduction_412 +happyReduction_412 happy_x_1 + = case happyOut168 happy_x_1 of { happy_var_1 -> + happyIn167 + (UnQual happy_var_1 + )} + +happyReduce_413 = happySpecReduce_1 163# happyReduction_413 +happyReduction_413 happy_x_1 + = case happyOutTok happy_x_1 of { (QConId happy_var_1) -> + happyIn167 + (Qual (Module (fst happy_var_1)) (HsIdent (snd happy_var_1)) + )} + +happyReduce_414 = happySpecReduce_1 164# happyReduction_414 +happyReduction_414 happy_x_1 + = case happyOutTok happy_x_1 of { (ConId happy_var_1) -> + happyIn168 + (HsIdent happy_var_1 + )} + +happyReduce_415 = happySpecReduce_1 165# happyReduction_415 +happyReduction_415 happy_x_1 + = case happyOut170 happy_x_1 of { happy_var_1 -> + happyIn169 + (UnQual happy_var_1 + )} + +happyReduce_416 = happySpecReduce_1 165# happyReduction_416 +happyReduction_416 happy_x_1 + = case happyOutTok happy_x_1 of { (QConSym happy_var_1) -> + happyIn169 + (Qual (Module (fst happy_var_1)) (HsSymbol (snd happy_var_1)) + )} + +happyReduce_417 = happySpecReduce_1 166# happyReduction_417 +happyReduction_417 happy_x_1 + = case happyOutTok happy_x_1 of { (ConSym happy_var_1) -> + happyIn170 + (HsSymbol happy_var_1 + )} + +happyReduce_418 = happySpecReduce_1 167# happyReduction_418 +happyReduction_418 happy_x_1 + = case happyOut173 happy_x_1 of { happy_var_1 -> + happyIn171 + (UnQual happy_var_1 + )} + +happyReduce_419 = happySpecReduce_1 167# happyReduction_419 +happyReduction_419 happy_x_1 + = case happyOut175 happy_x_1 of { happy_var_1 -> + happyIn171 + (happy_var_1 + )} + +happyReduce_420 = happySpecReduce_1 168# happyReduction_420 +happyReduction_420 happy_x_1 + = case happyOut174 happy_x_1 of { happy_var_1 -> + happyIn172 + (UnQual happy_var_1 + )} + +happyReduce_421 = happySpecReduce_1 168# happyReduction_421 +happyReduction_421 happy_x_1 + = case happyOut175 happy_x_1 of { happy_var_1 -> + happyIn172 + (happy_var_1 + )} + +happyReduce_422 = happySpecReduce_1 169# happyReduction_422 +happyReduction_422 happy_x_1 + = case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> + happyIn173 + (HsSymbol happy_var_1 + )} + +happyReduce_423 = happySpecReduce_1 169# happyReduction_423 +happyReduction_423 happy_x_1 + = happyIn173 + (minus_name + ) + +happyReduce_424 = happySpecReduce_1 169# happyReduction_424 +happyReduction_424 happy_x_1 + = happyIn173 + (pling_name + ) + +happyReduce_425 = happySpecReduce_1 169# happyReduction_425 +happyReduction_425 happy_x_1 + = happyIn173 + (dot_name + ) + +happyReduce_426 = happySpecReduce_1 169# happyReduction_426 +happyReduction_426 happy_x_1 + = happyIn173 + (star_name + ) + +happyReduce_427 = happySpecReduce_1 170# happyReduction_427 +happyReduction_427 happy_x_1 + = case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> + happyIn174 + (HsSymbol happy_var_1 + )} + +happyReduce_428 = happySpecReduce_1 170# happyReduction_428 +happyReduction_428 happy_x_1 + = happyIn174 + (pling_name + ) + +happyReduce_429 = happySpecReduce_1 170# happyReduction_429 +happyReduction_429 happy_x_1 + = happyIn174 + (dot_name + ) + +happyReduce_430 = happySpecReduce_1 170# happyReduction_430 +happyReduction_430 happy_x_1 + = happyIn174 + (star_name + ) + +happyReduce_431 = happySpecReduce_1 171# happyReduction_431 +happyReduction_431 happy_x_1 + = case happyOutTok happy_x_1 of { (QVarSym happy_var_1) -> + happyIn175 + (Qual (Module (fst happy_var_1)) (HsSymbol (snd happy_var_1)) + )} + +happyReduce_432 = happySpecReduce_1 172# happyReduction_432 +happyReduction_432 happy_x_1 + = case happyOutTok happy_x_1 of { (IntTok happy_var_1) -> + happyIn176 + (HsInt happy_var_1 + )} + +happyReduce_433 = happySpecReduce_1 172# happyReduction_433 +happyReduction_433 happy_x_1 + = case happyOutTok happy_x_1 of { (Character happy_var_1) -> + happyIn176 + (HsChar happy_var_1 + )} + +happyReduce_434 = happySpecReduce_1 172# happyReduction_434 +happyReduction_434 happy_x_1 + = case happyOutTok happy_x_1 of { (FloatTok happy_var_1) -> + happyIn176 + (HsFrac happy_var_1 + )} + +happyReduce_435 = happySpecReduce_1 172# happyReduction_435 +happyReduction_435 happy_x_1 + = case happyOutTok happy_x_1 of { (StringTok happy_var_1) -> + happyIn176 + (HsString happy_var_1 + )} + +happyReduce_436 = happyMonadReduce 0# 173# happyReduction_436 +happyReduction_436 (happyRest) tk + = happyThen (( getSrcLoc) + ) (\r -> happyReturn (happyIn177 r)) + +happyReduce_437 = happyMonadReduce 0# 174# happyReduction_437 +happyReduction_437 (happyRest) tk + = happyThen (( pushCurrentContext) + ) (\r -> happyReturn (happyIn178 r)) + +happyReduce_438 = happySpecReduce_1 175# happyReduction_438 +happyReduction_438 happy_x_1 + = happyIn179 + (() + ) + +happyReduce_439 = happyMonadReduce 1# 175# happyReduction_439 +happyReduction_439 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (( popContext) + ) (\r -> happyReturn (happyIn179 r)) + +happyReduce_440 = happySpecReduce_1 176# happyReduction_440 +happyReduction_440 happy_x_1 + = case happyOutTok happy_x_1 of { (ConId happy_var_1) -> + happyIn180 + (Module happy_var_1 + )} + +happyReduce_441 = happySpecReduce_1 176# happyReduction_441 +happyReduction_441 happy_x_1 + = case happyOutTok happy_x_1 of { (QConId happy_var_1) -> + happyIn180 + (Module (fst happy_var_1 ++ '.':snd happy_var_1) + )} + +happyReduce_442 = happySpecReduce_1 177# happyReduction_442 +happyReduction_442 happy_x_1 + = case happyOut168 happy_x_1 of { happy_var_1 -> + happyIn181 + (happy_var_1 + )} + +happyReduce_443 = happySpecReduce_1 178# happyReduction_443 +happyReduction_443 happy_x_1 + = case happyOut167 happy_x_1 of { happy_var_1 -> + happyIn182 + (happy_var_1 + )} + +happyReduce_444 = happySpecReduce_1 179# happyReduction_444 +happyReduction_444 happy_x_1 + = case happyOut167 happy_x_1 of { happy_var_1 -> + happyIn183 + (happy_var_1 + )} + +happyReduce_445 = happySpecReduce_1 180# happyReduction_445 +happyReduction_445 happy_x_1 + = case happyOut165 happy_x_1 of { happy_var_1 -> + happyIn184 + (happy_var_1 + )} + +happyReduce_446 = happySpecReduce_3 181# happyReduction_446 +happyReduction_446 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut184 happy_x_2 of { happy_var_2 -> + happyIn185 + (UnQual happy_var_2 + )} + +happyReduce_447 = happySpecReduce_1 181# happyReduction_447 +happyReduction_447 happy_x_1 + = case happyOut186 happy_x_1 of { happy_var_1 -> + happyIn185 + (UnQual happy_var_1 + )} + +happyReduce_448 = happySpecReduce_1 182# happyReduction_448 +happyReduction_448 happy_x_1 + = case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> + happyIn186 + (HsSymbol happy_var_1 + )} + +happyNewToken action sts stk + = lexer(\tk -> + let cont i = happyDoAction i tk action sts stk in + case tk of { + EOF -> happyDoAction 109# tk action sts stk; + VarId happy_dollar_dollar -> cont 1#; + QVarId happy_dollar_dollar -> cont 2#; + IDupVarId happy_dollar_dollar -> cont 3#; + ILinVarId happy_dollar_dollar -> cont 4#; + ConId happy_dollar_dollar -> cont 5#; + QConId happy_dollar_dollar -> cont 6#; + DVarId happy_dollar_dollar -> cont 7#; + VarSym happy_dollar_dollar -> cont 8#; + ConSym happy_dollar_dollar -> cont 9#; + QVarSym happy_dollar_dollar -> cont 10#; + QConSym happy_dollar_dollar -> cont 11#; + IntTok happy_dollar_dollar -> cont 12#; + FloatTok happy_dollar_dollar -> cont 13#; + Character happy_dollar_dollar -> cont 14#; + StringTok happy_dollar_dollar -> cont 15#; + LeftParen -> cont 16#; + RightParen -> cont 17#; + LeftHashParen -> cont 18#; + RightHashParen -> cont 19#; + SemiColon -> cont 20#; + LeftCurly -> cont 21#; + RightCurly -> cont 22#; + VRightCurly -> cont 23#; + LeftSquare -> cont 24#; + RightSquare -> cont 25#; + Comma -> cont 26#; + Underscore -> cont 27#; + BackQuote -> cont 28#; + Dot -> cont 29#; + DotDot -> cont 30#; + Colon -> cont 31#; + DoubleColon -> cont 32#; + Equals -> cont 33#; + Backslash -> cont 34#; + Bar -> cont 35#; + LeftArrow -> cont 36#; + RightArrow -> cont 37#; + At -> cont 38#; + Tilde -> cont 39#; + DoubleArrow -> cont 40#; + Minus -> cont 41#; + Exclamation -> cont 42#; + Star -> cont 43#; + RPOpen -> cont 44#; + RPClose -> cont 45#; + RPSeqOpen -> cont 46#; + RPSeqClose -> cont 47#; + RPStar -> cont 48#; + RPStarG -> cont 49#; + RPPlus -> cont 50#; + RPPlusG -> cont 51#; + RPOpt -> cont 52#; + RPOptG -> cont 53#; + RPEither -> cont 54#; + RPCAt -> cont 55#; + THIdEscape happy_dollar_dollar -> cont 56#; + THParenEscape -> cont 57#; + THExpQuote -> cont 58#; + THPatQuote -> cont 59#; + THTypQuote -> cont 60#; + THDecQuote -> cont 61#; + THCloseQuote -> cont 62#; + THReifyDecl -> cont 63#; + THReifyType -> cont 64#; + THReifyFixity -> cont 65#; + XPcdata happy_dollar_dollar -> cont 66#; + XStdTagOpen -> cont 67#; + XCloseTagOpen -> cont 68#; + XCodeTagOpen -> cont 69#; + XStdTagClose -> cont 70#; + XEmptyTagClose -> cont 71#; + XCodeTagClose -> cont 72#; + KW_Foreign -> cont 73#; + KW_Export -> cont 74#; + KW_Safe -> cont 75#; + KW_Unsafe -> cont 76#; + KW_Threadsafe -> cont 77#; + KW_StdCall -> cont 78#; + KW_CCall -> cont 79#; + KW_As -> cont 80#; + KW_Case -> cont 81#; + KW_Class -> cont 82#; + KW_Data -> cont 83#; + KW_Default -> cont 84#; + KW_Deriving -> cont 85#; + KW_DLet -> cont 86#; + KW_Do -> cont 87#; + KW_Else -> cont 88#; + KW_Family -> cont 89#; + KW_Forall -> cont 90#; + KW_Hiding -> cont 91#; + KW_If -> cont 92#; + KW_Import -> cont 93#; + KW_In -> cont 94#; + KW_Infix -> cont 95#; + KW_InfixL -> cont 96#; + KW_InfixR -> cont 97#; + KW_Instance -> cont 98#; + KW_Let -> cont 99#; + KW_MDo -> cont 100#; + KW_Module -> cont 101#; + KW_NewType -> cont 102#; + KW_Of -> cont 103#; + KW_Then -> cont 104#; + KW_Type -> cont 105#; + KW_Where -> cont 106#; + KW_With -> cont 107#; + KW_Qualified -> cont 108#; + _ -> happyError' tk + }) + +happyError_ tk = happyError' tk + +happyThen :: () => P a -> (a -> P b) -> P b +happyThen = (>>=) +happyReturn :: () => a -> P a +happyReturn = (return) +happyThen1 = happyThen +happyReturn1 :: () => a -> P a +happyReturn1 = happyReturn +happyError' :: () => Token -> P a +happyError' tk = (\token -> happyError) tk + +parse = happySomeParser where + happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut4 x)) + +happySeq = happyDontSeq + + +happyError :: P a +happyError = fail "Parse error" + +-- | Parse of a string, which should contain a complete Haskell 98 module. +parseModule :: String -> ParseResult HsModule +parseModule = runParser parse + +-- | Parse of a string, which should contain a complete Haskell 98 module. +parseModuleWithMode :: ParseMode -> String -> ParseResult HsModule +parseModuleWithMode mode = runParserWithMode mode parse +{-# LINE 1 "templates/GenericTemplate.hs" #-} +{-# LINE 1 "templates/GenericTemplate.hs" #-} +{-# LINE 1 "<built-in>" #-} +{-# LINE 1 "<command line>" #-} +{-# LINE 1 "templates/GenericTemplate.hs" #-} +-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp + +{-# LINE 28 "templates/GenericTemplate.hs" #-} + + +data Happy_IntList = HappyCons Int# Happy_IntList + + + + + +{-# LINE 49 "templates/GenericTemplate.hs" #-} + +{-# LINE 59 "templates/GenericTemplate.hs" #-} + +{-# LINE 68 "templates/GenericTemplate.hs" #-} + +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 i tk st + -1# -> {- nothing -} + happyAccept i tk st + n | (n <# (0# :: Int#)) -> {- nothing -} + + (happyReduceArr ! rule) i tk st + where rule = (I# ((negateInt# ((n +# (1# :: Int#)))))) + n -> {- nothing -} + + + happyShift new_state i tk st + where new_state = (n -# (1# :: Int#)) + where off = indexShortOffAddr happyActOffsets st + off_i = (off +# i) + check = if (off_i >=# (0# :: Int#)) + then (indexShortOffAddr happyCheck off_i ==# i) + else False + action | check = indexShortOffAddr happyTable off_i + | otherwise = indexShortOffAddr happyDefActions st + +{-# LINE 127 "templates/GenericTemplate.hs" #-} + + +indexShortOffAddr (HappyA# arr) off = +#if __GLASGOW_HASKELL__ > 500 + narrow16Int# i +#elif __GLASGOW_HASKELL__ == 500 + intToInt16# i +#else + (i `iShiftL#` 16#) `iShiftRA#` 16# +#endif + where +#if __GLASGOW_HASKELL__ >= 503 + i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low) +#else + i = word2Int# ((high `shiftL#` 8#) `or#` low) +#endif + high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#))) + low = int2Word# (ord# (indexCharOffAddr# arr off')) + off' = off *# 2# + + + + + +data HappyAddr = HappyA# Addr# + + + + +----------------------------------------------------------------------------- +-- HappyState data type (not arrays) + +{-# LINE 170 "templates/GenericTemplate.hs" #-} + +----------------------------------------------------------------------------- +-- Shifting a token + +happyShift new_state 0# tk st sts stk@(x `HappyStk` _) = + let i = (case unsafeCoerce# x of { (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 -# (1# :: 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 = + happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk)) + where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts)) + drop_stk = happyDropStk k 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 = + happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk)) + where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts)) + drop_stk = happyDropStk k stk + + off = indexShortOffAddr happyGotoOffsets st1 + off_i = (off +# nt) + new_state = indexShortOffAddr happyTable off_i + + + + +happyDrop 0# l = l +happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t + +happyDropStk 0# l = l +happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::Int#)) xs + +----------------------------------------------------------------------------- +-- Moving to a new state after a reduction + + +happyGoto nt j tk st = + {- nothing -} + happyDoAction j tk new_state + where off = indexShortOffAddr happyGotoOffsets st + off_i = (off +# 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 0# tk old_st _ stk = +-- trace "failing" $ + happyError_ 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 i tk (action) sts stk = +-- trace "entering error recovery" $ + happyDoAction 0# tk action sts ( (unsafeCoerce# (I# (i))) `HappyStk` stk) + +-- Internal happy errors: + +notHappyAtAll = error "Internal Happy error\n" + +----------------------------------------------------------------------------- +-- Hack to get the typechecker to accept our action functions + + +happyTcHack :: 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.
+ Language/Haskell/Exts/Parser.ly view
@@ -0,0 +1,1261 @@+> {+> -----------------------------------------------------------------------------+> -- |+> -- Module : Language.Haskell.Exts.Parser+> -- Original : Language.Haskell.Parser+> -- Copyright : (c) Niklas Broberg 2004,+> -- Original (c) Simon Marlow, Sven Panne 1997-2000+> -- License : BSD-style (see the file LICENSE.txt)+> --+> -- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se+> -- Stability : experimental+> -- Portability : portable+> --+> --+> -----------------------------------------------------------------------------+>+> module Language.Haskell.Exts.Parser (+> parseModule, parseModuleWithMode,+> ParseMode(..), defaultParseMode, ParseResult(..)) where+> +> import Language.Haskell.Exts.Syntax+> import Language.Haskell.Exts.ParseMonad+> import Language.Haskell.Exts.Lexer+> import Language.Haskell.Exts.ParseUtils+> }++-----------------------------------------------------------------------------+This module comprises a parser for Haskell 98 with the following extensions++* Multi-parameter type classes with functional dependencies+* Implicit parameters+* Pattern guards+* Mdo notation+* FFI+* HaRP+* HSP++Most of the code is blatantly stolen from the GHC module Language.Haskell.Parser.+Some of the code for extensions is greatly influenced by GHC's internal parser+library, ghc/compiler/parser/Parser.y. +-----------------------------------------------------------------------------+Conflicts: 3 shift/reduce++2 for ambiguity in 'case x of y | let z = y in z :: Bool -> b'+ (don't know whether to reduce 'Bool' as a btype or shift the '->'.+ Similarly lambda and if. The default resolution in favour of the+ shift means that a guard can never end with a type signature.+ In mitigation: it's a rare case and no Haskell implementation+ allows these, because it would require unbounded lookahead.)+ There are 2 conflicts rather than one because contexts are parsed+ as btypes (cf ctype).+ +1 for ambiguity in 'let ?x ...'+ the parser can't tell whether the ?x is the lhs of a normal binding or+ an implicit binding. Fortunately resolving as shift gives it the only+ sensible meaning, namely the lhs of an implicit binding.++-----------------------------------------------------------------------------++> %token+> VARID { VarId $$ }+> QVARID { QVarId $$ }+> IDUPID { IDupVarId $$ } -- duplicable implicit parameter ?x+> ILINID { ILinVarId $$ } -- linear implicit parameter %x+> CONID { ConId $$ }+> QCONID { QConId $$ }+> DVARID { DVarId $$ } -- VARID containing dashes+> VARSYM { VarSym $$ }+> CONSYM { ConSym $$ }+> QVARSYM { QVarSym $$ }+> QCONSYM { QConSym $$ }+> INT { IntTok $$ }+> RATIONAL { FloatTok $$ }+> CHAR { Character $$ }+> STRING { StringTok $$ }++Symbols++> '(' { LeftParen }+> ')' { RightParen }+> '(#' { LeftHashParen }+> '#)' { RightHashParen }+> ';' { SemiColon }+> '{' { LeftCurly }+> '}' { RightCurly }+> vccurly { VRightCurly } -- a virtual close brace+> '[' { LeftSquare }+> ']' { RightSquare }+> ',' { Comma }+> '_' { Underscore }+> '`' { BackQuote }++Reserved operators++> '.' { Dot }+> '..' { DotDot }+> ':' { Colon }+> '::' { DoubleColon }+> '=' { Equals }+> '\\' { Backslash }+> '|' { Bar }+> '<-' { LeftArrow }+> '->' { RightArrow }+> '@' { At }+> '~' { Tilde }+> '=>' { DoubleArrow }+> '-' { Minus }+> '!' { Exclamation }+> '*' { Star }++Harp++> '[/' { RPOpen }+> '/]' { RPClose }+> '(/' { RPSeqOpen }+> '/)' { RPSeqClose }+> 'rp*' { RPStar } -- '*' already taken+> '*!' { RPStarG }+> '+' { RPPlus }+> '+!' { RPPlusG }+> '?' { RPOpt }+> '?!' { RPOptG }+> 'rp|' { RPEither } -- '|' already taken+> '@:' { RPCAt }++Template Haskell++> IDSPLICE { THIdEscape $$ }+> '$(' { THParenEscape }+> '[|' { THExpQuote }+> '[p|' { THPatQuote }+> '[t|' { THTypQuote }+> '[d|' { THDecQuote }+> '|]' { THCloseQuote }+> 'reifyDecl' { THReifyDecl }+> 'reifyType' { THReifyType }+> 'reifyFixity' { THReifyFixity }++Hsx++> PCDATA { XPcdata $$ }+> '<' { XStdTagOpen }+> '</' { XCloseTagOpen }+> '<%' { XCodeTagOpen }+> '>' { XStdTagClose }+> '/>' { XEmptyTagClose }+> '%>' { XCodeTagClose }++FFI++> 'foreign' { KW_Foreign }+> 'export' { KW_Export }+> 'safe' { KW_Safe }+> 'unsafe' { KW_Unsafe }+> 'threadsafe' { KW_Threadsafe }+> 'stdcall' { KW_StdCall }+> 'ccall' { KW_CCall }++Reserved Ids++> 'as' { KW_As }+> 'case' { KW_Case }+> 'class' { KW_Class }+> 'data' { KW_Data }+> 'default' { KW_Default }+> 'deriving' { KW_Deriving }+> 'dlet' { KW_DLet } -- implicit parameter binding clause+> 'do' { KW_Do }+> 'else' { KW_Else }+> 'family' { KW_Family } -- indexed type families+> 'forall' { KW_Forall } -- universal/existential qualification+> 'hiding' { KW_Hiding }+> 'if' { KW_If }+> 'import' { KW_Import }+> 'in' { KW_In }+> 'infix' { KW_Infix }+> 'infixl' { KW_InfixL }+> 'infixr' { KW_InfixR }+> 'instance' { KW_Instance }+> 'let' { KW_Let }+> 'mdo' { KW_MDo }+> 'module' { KW_Module }+> 'newtype' { KW_NewType }+> 'of' { KW_Of }+> 'then' { KW_Then }+> 'type' { KW_Type }+> 'where' { KW_Where }+> 'with' { KW_With } -- implicit parameter binding clause+> 'qualified' { KW_Qualified }++> %monad { P }+> %lexer { lexer } { EOF }+> %name parse+> %tokentype { Token }+> %%++-----------------------------------------------------------------------------+HSP Pages++> page :: { HsModule }+> : topxml {% mkPageModule $1 }+> | '<%' module '%>' srcloc topxml {% mkPage $2 $4 $5 }+> | module { $1 }++> topxml :: { HsExp }+> : srcloc '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $3 $9;+> let { cn = reverse $7;+> as = reverse $4; };+> return $ HsXTag $1 n as $5 cn } }+> | srcloc '<' name attrs mattr '/>' { HsXETag $1 $3 (reverse $4) $5 }+++-----------------------------------------------------------------------------+Module Header++> module :: { HsModule }+> : srcloc 'module' modid maybeexports 'where' body+> { HsModule $1 $3 $4 (fst $6) (snd $6) }+> | srcloc body+> { HsModule $1 main_mod (Just [HsEVar (UnQual main_name)])+> (fst $2) (snd $2) }++> body :: { ([HsImportDecl],[HsDecl]) }+> : '{' bodyaux '}' { $2 }+> | open bodyaux close { $2 }++> bodyaux :: { ([HsImportDecl],[HsDecl]) }+> : optsemis impdecls semis topdecls { (reverse $2, $4) }+> | optsemis topdecls { ([], $2) }+> | optsemis impdecls optsemis { (reverse $2, []) }+> | optsemis { ([], []) }++> semis :: { () }+> : optsemis ';' { () }++> optsemis :: { () }+> : semis { () }+> | {- empty -} { () }++-----------------------------------------------------------------------------+The Export List++> maybeexports :: { Maybe [HsExportSpec] }+> : exports { Just $1 }+> | {- empty -} { Nothing }++> exports :: { [HsExportSpec] }+> : '(' exportlist optcomma ')' { reverse $2 }+> | '(' optcomma ')' { [] }++> optcomma :: { () }+> : ',' { () }+> | {- empty -} { () }++> exportlist :: { [HsExportSpec] }+> : exportlist ',' export { $3 : $1 }+> | export { [$1] }++> export :: { HsExportSpec }+> : qvar { HsEVar $1 }+> | qtyconorcls { HsEAbs $1 }+> | qtyconorcls '(' '..' ')' { HsEThingAll $1 }+> | qtyconorcls '(' ')' { HsEThingWith $1 [] }+> | qtyconorcls '(' cnames ')' { HsEThingWith $1 (reverse $3) }+> | 'module' modid { HsEModuleContents $2 }++-----------------------------------------------------------------------------+Import Declarations++> impdecls :: { [HsImportDecl] }+> : impdecls semis impdecl { $3 : $1 }+> | impdecl { [$1] }++> impdecl :: { HsImportDecl }+> : srcloc 'import' optqualified modid maybeas maybeimpspec+> { HsImportDecl $1 $4 $3 $5 $6 }++> optqualified :: { Bool }+> : 'qualified' { True }+> | {- empty -} { False }++> maybeas :: { Maybe Module }+> : 'as' modid { Just $2 }+> | {- empty -} { Nothing }+++> maybeimpspec :: { Maybe (Bool, [HsImportSpec]) }+> : impspec { Just $1 }+> | {- empty -} { Nothing }++> impspec :: { (Bool, [HsImportSpec]) }+> : opthiding '(' importlist optcomma ')' { ($1, reverse $3) }+> | opthiding '(' optcomma ')' { ($1, []) }++> opthiding :: { Bool }+> : 'hiding' { True }+> | {- empty -} { False }++> importlist :: { [HsImportSpec] }+> : importlist ',' importspec { $3 : $1 }+> | importspec { [$1] }++> importspec :: { HsImportSpec }+> : var { HsIVar $1 }+> | tyconorcls { HsIAbs $1 }+> | tyconorcls '(' '..' ')' { HsIThingAll $1 }+> | tyconorcls '(' ')' { HsIThingWith $1 [] }+> | tyconorcls '(' cnames ')' { HsIThingWith $1 (reverse $3) }++> cnames :: { [HsCName] }+> : cnames ',' cname { $3 : $1 }+> | cname { [$1] }++> cname :: { HsCName }+> : var { HsVarName $1 }+> | con { HsConName $1 }++-----------------------------------------------------------------------------+Fixity Declarations++> fixdecl :: { HsDecl }+> : srcloc infix prec ops { HsInfixDecl $1 $2 $3 (reverse $4) }++> prec :: { Int }+> : {- empty -} { 9 }+> | INT {% checkPrec $1 }++> infix :: { HsAssoc }+> : 'infix' { HsAssocNone }+> | 'infixl' { HsAssocLeft }+> | 'infixr' { HsAssocRight }++> ops :: { [HsOp] }+> : ops ',' op { $3 : $1 }+> | op { [$1] }++-----------------------------------------------------------------------------+Top-Level Declarations++Note: The report allows topdecls to be empty. This would result in another+shift/reduce-conflict, so we don't handle this case here, but in bodyaux.++> topdecls :: { [HsDecl] }+> : topdecls1 optsemis {% checkRevDecls $1 }++> topdecls1 :: { [HsDecl] }+> : topdecls1 semis topdecl { $3 : $1 }+> | topdecl { [$1] }++> topdecl :: { HsDecl }+> : srcloc 'type' dtype '=' ctype+> {% do { (c,ts) <- checkSimpleType $3;+> return (HsTypeDecl $1 c ts $5) } }+> | srcloc 'type' 'family' type optkind+> {% do { (c,ts) <- checkSimpleType $4;+> return (HsTypeFamDecl $1 c ts $5) } }+> | srcloc 'type' 'instance' dtype '=' ctype+> {% do { -- no checkSimpleType $4 since dtype may contain type patterns+> return (HsTypeInsDecl $1 $4 $6) } }+> | srcloc data_or_newtype ctype constrs0 deriving+> {% do { (cs,c,t) <- checkDataHeader $3;+> checkDataOrNew $2 $4;+> return (HsDataDecl $1 $2 cs c t (reverse $4) $5) } }+> | srcloc data_or_newtype ctype optkind 'where' gadtlist+> {% do { (cs,c,t) <- checkDataHeader $3;+> checkDataOrNew $2 $6;+> return (HsGDataDecl $1 $2 cs c t $4 (reverse $6)) } }+> | srcloc 'data' 'family' ctype optkind+> {% do { (cs,c,t) <- checkDataHeader $4;+> return (HsDataFamDecl $1 cs c t $5) } }+> | srcloc data_or_newtype 'instance' ctype constrs0 deriving+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> checkDataOrNew $2 $5;+> return (HsDataInsDecl $1 $2 $4 (reverse $5) $6) } }+> | srcloc data_or_newtype 'instance' ctype optkind 'where' gadtlist+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> checkDataOrNew $2 $7;+> return (HsGDataInsDecl $1 $2 $4 $5 (reverse $7)) } }+> | srcloc 'class' ctype fds optcbody+> {% do { (cs,c,vs) <- checkClassHeader $3;+> return (HsClassDecl $1 cs c vs $4 $5) } }+> | srcloc 'instance' ctype optvaldefs+> {% do { (cs,c,ts) <- checkInstHeader $3;+> return (HsInstDecl $1 cs c ts $4) } }+> | srcloc 'deriving' 'instance' ctype+> {% do { (cs, c, ts) <- checkInstHeader $4;+> return (HsDerivDecl $1 cs c ts) } }+> | srcloc 'default' '(' typelist ')'+> { HsDefaultDecl $1 $4 }+> | srcloc '$(' exp ')'+> {% do { e <- checkExpr $3;+> return $ HsSpliceDecl $1 $ HsParenSplice e } }+>+> | srcloc 'foreign' 'import' callconv safety fspec+> { let (s,n,t) = $6 in HsForImp $1 $4 $5 s n t }+> | srcloc 'foreign' 'export' callconv fspec+> { let (s,n,t) = $5 in HsForExp $1 $4 s n t }+> | decl { $1 }++> data_or_newtype :: { DataOrNew }+> : 'data' { DataType }+> | 'newtype' { NewType }++> typelist :: { [HsType] }+> : types { reverse $1 }+> | type { [$1] }+> | {- empty -} { [] }++> decls :: { [HsDecl] }+> : optsemis decls1 optsemis {% checkRevDecls $2 }+> | optsemis { [] }++> decls1 :: { [HsDecl] }+> : decls1 semis decl { $3 : $1 }+> | decl { [$1] }++> decl :: { HsDecl }+> : signdecl { $1 }+> | fixdecl { $1 }+> | valdef { $1 }++> decllist :: { [HsDecl] }+> : '{' decls '}' { $2 }+> | open decls close { $2 }++> signdecl :: { HsDecl }+> : srcloc vars '::' ctype { HsTypeSig $1 (reverse $2) $4 }++Binding can be either of implicit parameters, or it can be a normal sequence+of declarations. The two kinds cannot be mixed within the same block of+binding.++> binds :: { HsBinds }+> : decllist { HsBDecls $1 }+> | '{' ipbinds '}' { HsIPBinds $2 }+> | open ipbinds close { HsIPBinds $2 }++ATTENTION: Dirty Hackery Ahead! If the second alternative of vars is var+instead of qvar, we get another shift/reduce-conflict. Consider the+following programs:++ { (+) :: ... } only var+ { (+) x y = ... } could (incorrectly) be qvar++We re-use expressions for patterns, so a qvar would be allowed in patterns+instead of a var only (which would be correct). But deciding what the + is,+would require more lookahead. So let's check for ourselves...++> vars :: { [HsName] }+> : vars ',' var { $3 : $1 }+> | qvar {% do { n <- checkUnQual $1;+> return [n] } }++-----------------------------------------------------------------------------+FFI++> callconv :: { HsCallConv }+> : 'stdcall' { StdCall }+> | 'ccall' { CCall }++> safety :: { HsSafety }+> : 'safe' { PlaySafe False }+> | 'unsafe' { PlayRisky }+> | 'threadsafe' { PlaySafe True }+> | {- empty -} { PlaySafe False }++> fspec :: { (String, HsName, HsType) }+> : STRING var_no_safety '::' dtype { ($1, $2, $4) }+> | var_no_safety '::' dtype { ("", $1, $3) }++-----------------------------------------------------------------------------+Types++> dtype :: { HsType }+> : btype { $1 }+> | btype qtyconop dtype { HsTyInfix $1 $2 $3 }+> | btype qtyvarop dtype { HsTyInfix $1 $2 $3 }+> | btype '->' dtype { HsTyFun $1 $3 }++Implicit parameters can occur in normal types, as well as in contexts.++> type :: { HsType }+> : ivar '::' dtype { HsTyPred $ HsIParam $1 $3 }+> | dtype { $1 }++> btype :: { HsType }+> : btype atype { HsTyApp $1 $2 }+> | atype { $1 }++> atype :: { HsType }+> : gtycon { HsTyCon $1 }+> | tyvar { HsTyVar $1 }+> | '(' types ')' { HsTyTuple Boxed (reverse $2) }+> | '(#' types1 '#)' { HsTyTuple Unboxed (reverse $2) }+> | '[' type ']' { HsTyApp list_tycon $2 }+> | '(' ctype ')' { $2 }+> | '(' ctype '::' kind ')' { HsTyKind $2 $4 }++> gtycon :: { HsQName }+> : qconid { $1 }+> | '(' ')' { unit_tycon_name }+> | '(' '->' ')' { fun_tycon_name }+> | '[' ']' { list_tycon_name }+> | '(' commas ')' { tuple_tycon_name $2 }++These are for infix types++> qtyconop :: { HsQName }+> : qconop { $1 }++++++(Slightly edited) Comment from GHC's hsparser.y:+"context => type" vs "type" is a problem, because you can't distinguish between++ foo :: (Baz a, Baz a)+ bar :: (Baz a, Baz a) => [a] -> [a] -> [a]++with one token of lookahead. The HACK is to parse the context as a btype+(more specifically as a tuple type), then check that it has the right form+C a, or (C1 a, C2 b, ... Cn z) and convert it into a context. Blaach!++> ctype :: { HsType }+> : 'forall' ktyvars '.' ctype { mkHsTyForall (Just $2) [] $4 }+> | context '=>' type { mkHsTyForall Nothing $1 $3 }+> | type { $1 }++> context :: { HsContext }+> : btype {% checkContext $1 }++> types :: { [HsType] }+> : types1 ',' type { $3 : $1 }++> types1 :: { [HsType] }+> : type { [$1] }+> | types1 ',' type { $3 : $1 }++ simpletype :: { (HsName, [HsName]) }+ : tycon tyvars { ($1,reverse $2) }++> ktyvars :: { [HsTyVarBind] }+> : ktyvars ktyvar { $2 : $1 }+> | {- empty -} { [] }++> ktyvar :: { HsTyVarBind }+> : tyvar { HsUnkindedVar $1 }+> | '(' tyvar '::' kind ')' { HsKindedVar $2 $4 }++> tyvars :: { [HsName] }+> : tyvars tyvar { $2 : $1 }+> | {- empty -} { [] }+++-----------------------------------------------------------------------------+Functional Dependencies++> fds :: { [HsFunDep] }+> : {- empty -} { [] }+> | '|' fds1 { reverse $2 }++> fds1 :: { [HsFunDep] }+> : fds1 ',' fd { $3 : $1 }+> | fd { [$1] }++> fd :: { HsFunDep }+> : tyvars '->' tyvars { HsFunDep (reverse $1) (reverse $3) }++-----------------------------------------------------------------------------+Datatype declarations++GADTs++> gadtlist :: { [HsGadtDecl] }+> : '{' gadtconstrs1 '}' { $2 }+> | open gadtconstrs1 close { $2 }++> gadtconstrs1 :: { [HsGadtDecl] }+> : optsemis gadtconstrs optsemis { $2 }++> gadtconstrs :: { [HsGadtDecl] }+> : gadtconstrs semis gadtconstr { $3 : $1 }+> | gadtconstr { [$1] }++> gadtconstr :: { HsGadtDecl }+> : srcloc qcon '::' ctype {% do { c <- checkUnQual $2;+> return $ HsGadtDecl $1 c $4 } }++> constrs0 :: { [HsQualConDecl] }+> : {- empty -} { [] }+> | '=' constrs { $2 }++> constrs :: { [HsQualConDecl] }+> : constrs '|' constr { $3 : $1 }+> | constr { [$1] }++> constr :: { HsQualConDecl }+> : srcloc forall context '=>' constr1 { HsQualConDecl $1 $2 $3 $5 }+> | srcloc forall constr1 { HsQualConDecl $1 $2 [] $3 }++> forall :: { [HsTyVarBind] }+> : 'forall' ktyvars '.' { $2 }+> | {- empty -} { [] }++> constr1 :: { HsConDecl }+> : scontype { HsConDecl (fst $1) (snd $1) }+> | sbtype conop sbtype { HsConDecl $2 [$1,$3] }+> | con '{' '}' { HsRecDecl $1 [] }+> | con '{' fielddecls '}' { HsRecDecl $1 (reverse $3) }++> scontype :: { (HsName, [HsBangType]) }+> : btype {% do { (c,ts) <- splitTyConApp $1;+> return (c,map HsUnBangedTy ts) } }+> | scontype1 { $1 }++> scontype1 :: { (HsName, [HsBangType]) }+> : btype '!' atype {% do { (c,ts) <- splitTyConApp $1;+> return (c,map HsUnBangedTy ts+++> [HsBangedTy $3]) } }+> | scontype1 satype { (fst $1, snd $1 ++ [$2] ) }++> satype :: { HsBangType }+> : atype { HsUnBangedTy $1 }+> | '!' atype { HsBangedTy $2 }++> sbtype :: { HsBangType }+> : btype { HsUnBangedTy $1 }+> | '!' atype { HsBangedTy $2 }++> fielddecls :: { [([HsName],HsBangType)] }+> : fielddecls ',' fielddecl { $3 : $1 }+> | fielddecl { [$1] }++> fielddecl :: { ([HsName],HsBangType) }+> : vars '::' stype { (reverse $1, $3) }++> stype :: { HsBangType }+> : ctype { HsUnBangedTy $1 } +> | '!' atype { HsBangedTy $2 }++> deriving :: { [HsQName] }+> : {- empty -} { [] }+> | 'deriving' qtycls { [$2] }+> | 'deriving' '(' ')' { [] }+> | 'deriving' '(' dclasses ')' { reverse $3 }++> dclasses :: { [HsQName] }+> : dclasses ',' qtycls { $3 : $1 }+> | qtycls { [$1] }++-----------------------------------------------------------------------------+Kinds++> kind :: { HsKind }+> : akind { $1 }+> | akind '->' kind { HsKindFn $1 $3 }++> akind :: { HsKind }+> : '*' { HsKindStar }+> | '!' { HsKindBang }+> | '(' kind ')' { $2 }++> optkind :: { Maybe HsKind }+> : {-empty-} { Nothing }+> | '::' kind { Just $2 }+-----------------------------------------------------------------------------+Class declarations++No implicit parameters in the where clause of a class declaration.+> optcbody :: { [HsClassDecl] }+> : 'where' cldecllist {% checkClassBody $2 }+> | {- empty -} { [] }++> cldecllist :: { [HsClassDecl] }+> : '{' cldecls '}' { $2 }+> | open cldecls close { $2 }++> cldecls :: { [HsClassDecl] }+> : optsemis cldecls1 optsemis {% checkRevClsDecls $2 }+> | optsemis { [] }++> cldecls1 :: { [HsClassDecl] }+> : cldecls1 semis cldecl { $3 : $1 }+> | cldecl { [$1] }++> cldecl :: { HsClassDecl }+> : decl { HsClsDecl $1 }+> | atdecl { $1 }++> atdecl :: { HsClassDecl }+> : srcloc 'type' type optkind +> {% do { (c,ts) <- checkSimpleType $3;+> return (HsClsTyFam $1 c ts $4) } }+> | srcloc 'type' dtype '=' ctype+> { HsClsTyDef $1 $3 $5 }+> | srcloc 'data' ctype optkind+> {% do { (cs,c,t) <- checkDataHeader $3;+> return (HsClsDataFam $1 cs c t $4) } }++-----------------------------------------------------------------------------+Instance declarations++> optvaldefs :: { [HsInstDecl] }+> : 'where' '{' valdefs '}' {% checkInstBody $3 }+> | 'where' open valdefs close {% checkInstBody $3 }+> | {- empty -} { [] }++> valdefs :: { [HsInstDecl] }+> : optsemis valdefs1 optsemis {% checkRevInstDecls $2 }+> | optsemis { [] }++> valdefs1 :: { [HsInstDecl] }+> : valdefs1 semis insvaldef { $3 : $1 }+> | insvaldef { [$1] }++> insvaldef :: { HsInstDecl }+> : valdef { HsInsDecl $1 }+> | atinst { $1 }++> atinst :: { HsInstDecl }+> : srcloc 'type' dtype '=' ctype+> {% do { -- no checkSimpleType $4 since dtype may contain type patterns+> return (HsInsType $1 $3 $5) } }+> | srcloc data_or_newtype ctype constrs0 deriving+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> checkDataOrNew $2 $4;+> return (HsInsData $1 $2 $3 (reverse $4) $5) } }+> | srcloc data_or_newtype ctype optkind 'where' gadtlist+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> checkDataOrNew $2 $6;+> return (HsInsGData $1 $2 $3 $4 (reverse $6)) } }++-----------------------------------------------------------------------------+Value definitions++> valdef :: { HsDecl }+> : srcloc exp0b rhs optwhere {% checkValDef $1 $2 $3 $4 }++May bind implicit parameters+> optwhere :: { HsBinds }+> : 'where' binds { $2 }+> | {- empty -} { HsBDecls [] }++> rhs :: { HsRhs }+> : '=' exp {% do { e <- checkExpr $2;+> return (HsUnGuardedRhs e) } }+> | gdrhs { HsGuardedRhss (reverse $1) }++> gdrhs :: { [HsGuardedRhs] }+> : gdrhs gdrh { $2 : $1 }+> | gdrh { [$1] }++Guards may contain patterns, hence quals instead of exp.+> gdrh :: { HsGuardedRhs }+> : srcloc '|' quals '=' exp {% do { e <- checkExpr $5;+> return (HsGuardedRhs $1 (reverse $3) e) } }++-----------------------------------------------------------------------------+Expressions++Note: The Report specifies a meta-rule for lambda, let and if expressions+(the exp's that end with a subordinate exp): they extend as far to+the right as possible. That means they cannot be followed by a type+signature or infix application. To implement this without shift/reduce+conflicts, we split exp10 into these expressions (exp10a) and the others+(exp10b). That also means that only an exp0 ending in an exp10b (an exp0b)+can followed by a type signature or infix application. So we duplicate+the exp0 productions to distinguish these from the others (exp0a).++> exp :: { HsExp }+> : exp0b '::' srcloc ctype { HsExpTypeSig $3 $1 $4 }+> | exp0b 'with' ipbinding { HsWith $1 $3 } -- implicit parameters+> | exp0 { $1 }++> exp0 :: { HsExp }+> : exp0a { $1 }+> | exp0b { $1 }++> exp0a :: { HsExp }+> : exp0b qop exp10a { HsInfixApp $1 $2 $3 }+> | exp10a { $1 }++> exp0b :: { HsExp }+> : exp0b qop exp10b { HsInfixApp $1 $2 $3 }+> | dvarexp { $1 }+> | exp10b { $1 }++> exp10a :: { HsExp }+> : '\\' srcloc apats '->' exp { HsLambda $2 (reverse $3) $5 }+A let may bind implicit parameters+> | 'let' binds 'in' exp { HsLet $2 $4 }+> | 'dlet' ipbinding 'in' exp { HsDLet $2 $4 }+> | 'if' exp 'then' exp 'else' exp { HsIf $2 $4 $6 }++> exp10b :: { HsExp }+> : 'case' exp 'of' altslist { HsCase $2 $4 }+> | '-' fexp { HsNegApp $2 }+> | 'do' stmtlist { HsDo $2 }+> | 'mdo' stmtlist { HsMDo $2 }+> | reifyexp { HsReifyExp $1 }+> | fexp { $1 }++> fexp :: { HsExp }+> : fexp aexp { HsApp $1 $2 }+> | aexp { $1 }++> apats :: { [HsPat] }+> : apats apat { $2 : $1 }+> | apat { [$1] }++> apat :: { HsPat }+> : aexp {% checkPattern $1 }++UGLY: Because patterns and expressions are mixed, aexp has to be split into+two rules: One right-recursive and one left-recursive. Otherwise we get two+reduce/reduce-errors (for as-patterns and irrefutable patters).++Even though the variable in an as-pattern cannot be qualified, we use+qvar here to avoid a shift/reduce conflict, and then check it ourselves+(as for vars above).++> aexp :: { HsExp }+> : qvar '@' aexp {% do { n <- checkUnQual $1;+> return (HsAsPat n $3) } }+> | qvar '@:' aexp {% do { n <- checkUnQual $1;+> return (HsCAsRP n $3) } }+> | '~' aexp { HsIrrPat $2 }+> | aexp1 { $1 }++Note: The first two alternatives of aexp1 are not necessarily record+updates: they could be labeled constructions.++> aexp1 :: { HsExp }+> : aexp1 '{' '}' {% mkRecConstrOrUpdate $1 [] }+> | aexp1 '{' fbinds '}' {% mkRecConstrOrUpdate $1 (reverse $3) }+> | aexp1 'rp*' { HsStarRP $1 }+> | aexp1 '*!' { HsStarGRP $1 }+> | aexp1 '+' { HsPlusRP $1 }+> | aexp1 '+!' { HsPlusGRP $1 }+> | aexp1 '?' { HsOptRP $1 }+> | aexp1 '?!' { HsOptGRP $1 }+> | aexp2 { $1 }++According to the Report, the left section (e op) is legal iff (e op x)+parses equivalently to ((e) op x). Thus e must be an exp0b.+An implicit parameter can be used as an expression.++> aexp2 :: { HsExp }+> : ivar { HsIPVar $1 }+> | qvar { HsVar $1 }+> | gcon { $1 }+> | literal { HsLit $1 }+> | '(' exp ')' { HsParen $2 }+> | '(' texps ')' { HsTuple (reverse $2) }+> | '[' list ']' { $2 }+> | '(' exp0b qop ')' { HsLeftSection $2 $3 }+> | '(' qopm exp0 ')' { HsRightSection $2 $3 }+> | '_' { HsWildCard }+> | '(' erpats ')' { $2 }+> | '(/' rpats '/)' { HsSeqRP $ reverse $2 }+> | srcloc '[/' rpats '/]' { HsRPats $1 $ reverse $3 }+> | xml { $1 }++Template Haskell+> | IDSPLICE { HsSpliceExp $ HsIdSplice $1 }+> | '$(' exp ')' {% do { e <- checkExpr $2;+> return $ HsSpliceExp $ HsParenSplice e } }+> | '[|' exp '|]' {% do { e <- checkExpr $2;+> return $ HsBracketExp $ HsExpBracket e } }+> | '[p|' exp0 '|]' {% do { p <- checkPattern $2;+> return $ HsBracketExp $ HsPatBracket p } }+> | '[t|' ctype '|]' { HsBracketExp $ HsTypeBracket $2 }+> | '[d|' open topdecls close '|]' { HsBracketExp $ HsDeclBracket $3 }++> reifyexp :: { HsReify }+> : 'reifyDecl' gtycon { HsReifyDecl $2 }+> | 'reifyDecl' qvar { HsReifyDecl $2 }+> | 'reifyType' qcname { HsReifyType $2 }+> | 'reifyFixity' qcname { HsReifyFixity $2 }++> qcname :: { HsQName }+> : qvar { $1 }+> | gcon {% getGConName $1 }+End Template Haskell++> commas :: { Int }+> : commas ',' { $1 + 1 }+> | ',' { 1 }++> texps :: { [HsExp] }+> : texps ',' exp { $3 : $1 }+> | exp ',' exp { [$3,$1] }++-----------------------------------------------------------------------------+Harp Extensions++> rpats :: { [HsExp] }+> : rpats ',' rpat { $3 : $1 }+> | rpat { [$1] }++> rpat :: { HsExp }+> : erpats { $1 }+> | exp { $1 }++Either patterns are left associative+> erpats :: { HsExp }+> : exp 'rp|' erpats { HsEitherRP $1 $3 }+> | exp 'rp|' exp { HsEitherRP $1 $3 }++-----------------------------------------------------------------------------+Hsx Extensions++> xml :: { HsExp }+> : srcloc '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $3 $9;+> let { cn = reverse $7;+> as = reverse $4; };+> return $ HsXTag $1 n as $5 cn } }+> | srcloc '<' name attrs mattr '/>' { HsXETag $1 $3 (reverse $4) $5 }+> | '<%' exp '%>' { HsXExpTag $2 }++> children :: { [HsExp] }+> : children child { $2 : $1 }+> | {- empty -} { [] }++> child :: { HsExp }+> : PCDATA { HsXPcdata $1 }+> | srcloc '[/' rpats '/]' { HsRPats $1 $ reverse $3 }+> | xml { $1 }++> name :: { HsXName }+> : xmlname ':' xmlname { HsXDomName $1 $3 }+> | xmlname { HsXName $1 }++> xmlname :: { String }+> : VARID { $1 }+> | CONID { $1 }+> | DVARID { mkDVar $1 }+> | 'type' { "type" }+> | 'class' { "class" }++> attrs :: { [HsXAttr] }+> : attrs attr { $2 : $1 }+> | {- empty -} { [] }++> attr :: { HsXAttr }+> : name '=' aexp { HsXAttr $1 $3 }++> mattr :: { Maybe HsExp }+> : aexp { Just $1 }+> | {-empty-} { Nothing }++Turning dash variables into infix expressions with '-'+> dvarexp :: { HsExp }+> : DVARID { mkDVarExpr $1 }++-----------------------------------------------------------------------------+List expressions++The rules below are little bit contorted to keep lexps left-recursive while+avoiding another shift/reduce-conflict.++> list :: { HsExp }+> : exp { HsList [$1] }+> | lexps { HsList (reverse $1) }+> | exp '..' { HsEnumFrom $1 }+> | exp ',' exp '..' { HsEnumFromThen $1 $3 }+> | exp '..' exp { HsEnumFromTo $1 $3 }+> | exp ',' exp '..' exp { HsEnumFromThenTo $1 $3 $5 }+> | exp '|' quals { HsListComp $1 (reverse $3) }++> lexps :: { [HsExp] }+> : lexps ',' exp { $3 : $1 }+> | exp ',' exp { [$3,$1] }++-----------------------------------------------------------------------------+List comprehensions++> quals :: { [HsStmt] }+> : quals ',' qual { $3 : $1 }+> | qual { [$1] }++> qual :: { HsStmt }+> : pat srcloc '<-' exp { HsGenerator $2 $1 $4 }+> | exp { HsQualifier $1 }+> | 'let' binds { HsLetStmt $2 }++-----------------------------------------------------------------------------+Case alternatives++> altslist :: { [HsAlt] }+> : '{' alts '}' { $2 }+> | open alts close { $2 }++> alts :: { [HsAlt] }+> : optsemis alts1 optsemis { reverse $2 }++> alts1 :: { [HsAlt] }+> : alts1 semis alt { $3 : $1 }+> | alt { [$1] }++> alt :: { HsAlt }+> : srcloc pat ralt optwhere { HsAlt $1 $2 $3 $4 }++> ralt :: { HsGuardedAlts }+> : '->' exp { HsUnGuardedAlt $2 }+> | gdpats { HsGuardedAlts (reverse $1) }++> gdpats :: { [HsGuardedAlt] }+> : gdpats gdpat { $2 : $1 }+> | gdpat { [$1] }++A guard can be a pattern guard, hence quals instead of exp0.+> gdpat :: { HsGuardedAlt }+> : srcloc '|' quals '->' exp { HsGuardedAlt $1 (reverse $3) $5 }++> pat :: { HsPat }+> : exp0b {% checkPattern $1 }++-----------------------------------------------------------------------------+Statement sequences++As per the Report, but with stmt expanded to simplify building the list+without introducing conflicts. This also ensures that the last stmt is+an expression.++> stmtlist :: { [HsStmt] }+> : '{' stmts '}' { $2 }+> | open stmts close { $2 }++A let statement may bind implicit parameters.+> stmts :: { [HsStmt] }+> : 'let' binds ';' stmts { HsLetStmt $2 : $4 }+> | pat srcloc '<-' exp ';' stmts { HsGenerator $2 $1 $4 : $6 }+> | exp ';' stmts { HsQualifier $1 : $3 }+> | ';' stmts { $2 }+> | exp ';' { [HsQualifier $1] }+> | exp { [HsQualifier $1] }++-----------------------------------------------------------------------------+Record Field Update/Construction++> fbinds :: { [HsFieldUpdate] }+> : fbinds ',' fbind { $3 : $1 }+> | fbind { [$1] }++> fbind :: { HsFieldUpdate }+> : qvar '=' exp { HsFieldUpdate $1 $3 }++-----------------------------------------------------------------------------+Implicit parameter bindings++> ipbinding :: { [HsIPBind] }+> : '{' ipbinds '}' { $2 }+> | open ipbinds close { $2 }++> ipbinds :: { [HsIPBind] }+> : optsemis ipbinds1 optsemis { reverse $2 }++> ipbinds1 :: { [HsIPBind] }+> : ipbinds1 semis ipbind { $3 : $1 }+> | ipbind { [$1] }++> ipbind :: { HsIPBind }+> : srcloc ivar '=' exp { HsIPBind $1 $2 $4 }++-----------------------------------------------------------------------------+Variables, Constructors and Operators.++> gcon :: { HsExp }+> : '(' ')' { unit_con }+> | '[' ']' { HsList [] }+> | '(' commas ')' { tuple_con $2 }+> | qcon { HsCon $1 }++> var :: { HsName }+> : varid { $1 }+> | '(' varsym ')' { $2 }++> var_no_safety :: { HsName }+> : varid_no_safety { $1 }+> | '(' varsym ')' { $2 }++> qvar :: { HsQName }+> : qvarid { $1 }+> | '(' qvarsym ')' { $2 }++Implicit parameter+> ivar :: { HsIPName }+> : ivarid { $1 }++> con :: { HsName }+> : conid { $1 }+> | '(' consym ')' { $2 }++> qcon :: { HsQName }+> : qconid { $1 }+> | '(' gconsym ')' { $2 }++> varop :: { HsName }+> : varsym { $1 }+> | '`' varid '`' { $2 }++> qvarop :: { HsQName }+> : qvarsym { $1 }+> | '`' qvarid '`' { $2 }++> qvaropm :: { HsQName }+> : qvarsymm { $1 }+> | '`' qvarid '`' { $2 }++> conop :: { HsName }+> : consym { $1 } +> | '`' conid '`' { $2 }++> qconop :: { HsQName }+> : gconsym { $1 }+> | '`' qconid '`' { $2 }++> op :: { HsOp }+> : varop { HsVarOp $1 }+> | conop { HsConOp $1 }++> qop :: { HsQOp }+> : qvarop { HsQVarOp $1 }+> | qconop { HsQConOp $1 }++> qopm :: { HsQOp }+> : qvaropm { HsQVarOp $1 }+> | qconop { HsQConOp $1 }++> gconsym :: { HsQName }+> : ':' { list_cons_name }+> | qconsym { $1 }++-----------------------------------------------------------------------------+Identifiers and Symbols++> qvarid :: { HsQName }+> : varid { UnQual $1 }+> | QVARID { Qual (Module (fst $1)) (HsIdent (snd $1)) }++> varid_no_safety :: { HsName }+> : VARID { HsIdent $1 }+> | 'as' { as_name }+> | 'qualified' { qualified_name }+> | 'hiding' { hiding_name }+> | 'export' { export_name }+> | 'stdcall' { stdcall_name }+> | 'ccall' { ccall_name }++> varid :: { HsName }+> : varid_no_safety { $1 }+> | 'safe' { safe_name }+> | 'unsafe' { unsafe_name }+> | 'threadsafe' { threadsafe_name }+++Implicit parameter+> ivarid :: { HsIPName }+> : IDUPID { HsIPDup $1 }+> | ILINID { HsIPLin $1 }++> qconid :: { HsQName }+> : conid { UnQual $1 }+> | QCONID { Qual (Module (fst $1)) (HsIdent (snd $1)) }++> conid :: { HsName }+> : CONID { HsIdent $1 }++> qconsym :: { HsQName }+> : consym { UnQual $1 }+> | QCONSYM { Qual (Module (fst $1)) (HsSymbol (snd $1)) }++> consym :: { HsName }+> : CONSYM { HsSymbol $1 }++> qvarsym :: { HsQName }+> : varsym { UnQual $1 }+> | qvarsym1 { $1 }++> qvarsymm :: { HsQName }+> : varsymm { UnQual $1 }+> | qvarsym1 { $1 }++> varsym :: { HsName }+> : VARSYM { HsSymbol $1 }+> | '-' { minus_name }+> | '!' { pling_name }+> | '.' { dot_name }+> | '*' { star_name }++> varsymm :: { HsName } -- varsym not including '-'+> : VARSYM { HsSymbol $1 }+> | '!' { pling_name }+> | '.' { dot_name }+> | '*' { star_name }++> qvarsym1 :: { HsQName }+> : QVARSYM { Qual (Module (fst $1)) (HsSymbol (snd $1)) }++> literal :: { HsLiteral }+> : INT { HsInt $1 }+> | CHAR { HsChar $1 }+> | RATIONAL { HsFrac $1 }+> | STRING { HsString $1 }++> srcloc :: { SrcLoc } : {% getSrcLoc }+ +-----------------------------------------------------------------------------+Layout++> open :: { () } : {% pushCurrentContext }++> close :: { () }+> : vccurly { () } -- context popped in lexer.+> | error {% popContext }++-----------------------------------------------------------------------------+Miscellaneous (mostly renamings)++> modid :: { Module }+> : CONID { Module $1 }+> | QCONID { Module (fst $1 ++ '.':snd $1) }++> tyconorcls :: { HsName }+> : conid { $1 }++ tycon :: { HsName }+ : conid { $1 }++> qtyconorcls :: { HsQName }+> : qconid { $1 }++> qtycls :: { HsQName }+> : qconid { $1 }++> tyvar :: { HsName }+> : varid { $1 }++> qtyvarop :: { HsQName }+> qtyvarop : '`' tyvar '`' { UnQual $2 }+> | tyvarsym { UnQual $1 }++> tyvarsym :: { HsName }+> tyvarsym : VARSYM { HsSymbol $1 }++-----------------------------------------------------------------------------++> {+> happyError :: P a+> happyError = fail "Parse error"++> -- | Parse of a string, which should contain a complete Haskell 98 module.+> parseModule :: String -> ParseResult HsModule+> parseModule = runParser parse++> -- | Parse of a string, which should contain a complete Haskell 98 module.+> parseModuleWithMode :: ParseMode -> String -> ParseResult HsModule+> parseModuleWithMode mode = runParserWithMode mode parse+> }
+ Language/Haskell/Exts/Pretty.hs view
@@ -0,0 +1,1083 @@+{-# OPTIONS_GHC -w #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Pretty+-- Original : Language.Haskell.Pretty+-- Copyright : (c) Niklas Broberg 2004,+-- (c) The GHC Team, Noel Winstanley 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se+-- Stability : experimental+-- Portability : portable+--+-- Pretty printer for Haskell with extensions.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Pretty (+ -- * Pretty printing+ Pretty,+ prettyPrintStyleMode, prettyPrintWithMode, prettyPrint,+ -- * Pretty-printing styles (from "Text.PrettyPrint.HughesPJ")+ P.Style(..), P.style, P.Mode(..),+ -- * Haskell formatting modes+ PPHsMode(..), Indent, PPLayout(..), defaultMode) where++import Language.Haskell.Exts.Syntax++import qualified Text.PrettyPrint as P++infixl 5 $$$++-----------------------------------------------------------------------------++-- | Varieties of layout we can use.+data PPLayout = PPOffsideRule -- ^ classical layout+ | PPSemiColon -- ^ classical layout made explicit+ | PPInLine -- ^ inline decls, with newlines between them+ | PPNoLayout -- ^ everything on a single line+ deriving Eq++type Indent = Int++-- | Pretty-printing parameters.+--+-- /Note:/ the 'onsideIndent' must be positive and less than all other indents.+data PPHsMode = PPHsMode {+ -- | indentation of a class or instance+ classIndent :: Indent,+ -- | indentation of a @do@-expression+ doIndent :: Indent,+ -- | indentation of the body of a+ -- @case@ expression+ caseIndent :: Indent,+ -- | indentation of the declarations in a+ -- @let@ expression+ letIndent :: Indent,+ -- | indentation of the declarations in a+ -- @where@ clause+ whereIndent :: Indent,+ -- | indentation added for continuation+ -- lines that would otherwise be offside+ onsideIndent :: Indent,+ -- | blank lines between statements?+ spacing :: Bool,+ -- | Pretty-printing style to use+ layout :: PPLayout,+ -- | add GHC-style @LINE@ pragmas to output?+ linePragmas :: Bool,+ -- | not implemented yet+ comments :: Bool+ }++-- | The default mode: pretty-print using the offside rule and sensible+-- defaults.+defaultMode :: PPHsMode+defaultMode = PPHsMode{+ classIndent = 8,+ doIndent = 3,+ caseIndent = 4,+ letIndent = 4,+ whereIndent = 6,+ onsideIndent = 2,+ spacing = True,+ layout = PPOffsideRule,+ linePragmas = False,+ comments = True+ }++-- | Pretty printing monad+newtype DocM s a = DocM (s -> a)++instance Functor (DocM s) where+ fmap f xs = do x <- xs; return (f x)++instance Monad (DocM s) where+ (>>=) = thenDocM+ (>>) = then_DocM+ return = retDocM++{-# INLINE thenDocM #-}+{-# INLINE then_DocM #-}+{-# INLINE retDocM #-}+{-# INLINE unDocM #-}+{-# INLINE getPPEnv #-}++thenDocM :: DocM s a -> (a -> DocM s b) -> DocM s b+thenDocM m k = DocM $ (\s -> case unDocM m $ s of a -> unDocM (k a) $ s)++then_DocM :: DocM s a -> DocM s b -> DocM s b+then_DocM m k = DocM $ (\s -> case unDocM m $ s of _ -> unDocM k $ s)++retDocM :: a -> DocM s a+retDocM a = DocM (\_s -> a)++unDocM :: DocM s a -> (s -> a)+unDocM (DocM f) = f++-- all this extra stuff, just for this one function.+getPPEnv :: DocM s s+getPPEnv = DocM id++-- So that pp code still looks the same+-- this means we lose some generality though++-- | The document type produced by these pretty printers uses a 'PPHsMode'+-- environment.+type Doc = DocM PPHsMode P.Doc++-- | Things that can be pretty-printed, including all the syntactic objects+-- in "Language.Haskell.Syntax".+class Pretty a where+ -- | Pretty-print something in isolation.+ pretty :: a -> Doc+ -- | Pretty-print something in a precedence context.+ prettyPrec :: Int -> a -> Doc+ pretty = prettyPrec 0+ prettyPrec _ = pretty++-- The pretty printing combinators++empty :: Doc+empty = return P.empty++nest :: Int -> Doc -> Doc+nest i m = m >>= return . P.nest i+++-- Literals++text, ptext :: String -> Doc+text = return . P.text+ptext = return . P.text++char :: Char -> Doc+char = return . P.char++int :: Int -> Doc+int = return . P.int++integer :: Integer -> Doc+integer = return . P.integer++float :: Float -> Doc+float = return . P.float++double :: Double -> Doc+double = return . P.double++rational :: Rational -> Doc+rational = return . P.rational++-- Simple Combining Forms++parens, brackets, braces,quotes,doubleQuotes :: Doc -> Doc+parens d = d >>= return . P.parens+brackets d = d >>= return . P.brackets+braces d = d >>= return . P.braces+quotes d = d >>= return . P.quotes+doubleQuotes d = d >>= return . P.doubleQuotes++parensIf :: Bool -> Doc -> Doc+parensIf True = parens+parensIf False = id++-- Constants++semi,comma,colon,space,equals :: Doc+semi = return P.semi+comma = return P.comma+colon = return P.colon+space = return P.space+equals = return P.equals++lparen,rparen,lbrack,rbrack,lbrace,rbrace :: Doc+lparen = return P.lparen+rparen = return P.rparen+lbrack = return P.lbrack+rbrack = return P.rbrack+lbrace = return P.lbrace+rbrace = return P.rbrace++-- Combinators++(<>),(<+>),($$),($+$) :: Doc -> Doc -> Doc+aM <> bM = do{a<-aM;b<-bM;return (a P.<> b)}+aM <+> bM = do{a<-aM;b<-bM;return (a P.<+> b)}+aM $$ bM = do{a<-aM;b<-bM;return (a P.$$ b)}+aM $+$ bM = do{a<-aM;b<-bM;return (a P.$+$ b)}++hcat,hsep,vcat,sep,cat,fsep,fcat :: [Doc] -> Doc+hcat dl = sequence dl >>= return . P.hcat+hsep dl = sequence dl >>= return . P.hsep+vcat dl = sequence dl >>= return . P.vcat+sep dl = sequence dl >>= return . P.sep+cat dl = sequence dl >>= return . P.cat+fsep dl = sequence dl >>= return . P.fsep+fcat dl = sequence dl >>= return . P.fcat++-- Some More++hang :: Doc -> Int -> Doc -> Doc+hang dM i rM = do{d<-dM;r<-rM;return $ P.hang d i r}++-- Yuk, had to cut-n-paste this one from Pretty.hs+punctuate :: Doc -> [Doc] -> [Doc]+punctuate _ [] = []+punctuate p (d1:ds) = go d1 ds+ where+ go d [] = [d]+ go d (e:es) = (d <> p) : go e es++-- | render the document with a given style and mode.+renderStyleMode :: P.Style -> PPHsMode -> Doc -> String+renderStyleMode ppStyle ppMode d = P.renderStyle ppStyle . unDocM d $ ppMode++-- | render the document with a given mode.+renderWithMode :: PPHsMode -> Doc -> String+renderWithMode = renderStyleMode P.style++-- | render the document with 'defaultMode'.+render :: Doc -> String+render = renderWithMode defaultMode++-- | pretty-print with a given style and mode.+prettyPrintStyleMode :: Pretty a => P.Style -> PPHsMode -> a -> String+prettyPrintStyleMode ppStyle ppMode = renderStyleMode ppStyle ppMode . pretty++-- | pretty-print with the default style and a given mode.+prettyPrintWithMode :: Pretty a => PPHsMode -> a -> String+prettyPrintWithMode = prettyPrintStyleMode P.style++-- | pretty-print with the default style and 'defaultMode'.+prettyPrint :: Pretty a => a -> String+prettyPrint = prettyPrintWithMode defaultMode++fullRenderWithMode :: PPHsMode -> P.Mode -> Int -> Float ->+ (P.TextDetails -> a -> a) -> a -> Doc -> a+fullRenderWithMode ppMode m i f fn e mD =+ P.fullRender m i f fn e $ (unDocM mD) ppMode+++fullRender :: P.Mode -> Int -> Float -> (P.TextDetails -> a -> a)+ -> a -> Doc -> a+fullRender = fullRenderWithMode defaultMode++------------------------- Pretty-Print a Module --------------------+instance Pretty HsModule where+ pretty (HsModule pos m mbExports imp decls) =+ markLine pos $+ topLevel (ppHsModuleHeader m mbExports)+ (map pretty imp ++ map pretty decls)++-------------------------- Module Header ------------------------------+ppHsModuleHeader :: Module -> Maybe [HsExportSpec] -> Doc+ppHsModuleHeader m mbExportList = mySep [+ text "module",+ pretty m,+ maybePP (parenList . map pretty) mbExportList,+ text "where"]++instance Pretty Module where+ pretty (Module modName) = text modName++instance Pretty HsExportSpec where+ pretty (HsEVar name) = pretty name+ pretty (HsEAbs name) = pretty name+ pretty (HsEThingAll name) = pretty name <> text "(..)"+ pretty (HsEThingWith name nameList) =+ pretty name <> (parenList . map pretty $ nameList)+ pretty (HsEModuleContents m) = text "module" <+> pretty m++instance Pretty HsImportDecl where+ pretty (HsImportDecl pos m qual mbName mbSpecs) =+ markLine pos $+ mySep [text "import",+ if qual then text "qualified" else empty,+ pretty m,+ maybePP (\m' -> text "as" <+> pretty m') mbName,+ maybePP exports mbSpecs]+ where+ exports (b,specList) =+ if b then text "hiding" <+> specs else specs+ where specs = parenList . map pretty $ specList++instance Pretty HsImportSpec where+ pretty (HsIVar name) = pretty name+ pretty (HsIAbs name) = pretty name+ pretty (HsIThingAll name) = pretty name <> text "(..)"+ pretty (HsIThingWith name nameList) =+ pretty name <> (parenList . map pretty $ nameList)++------------------------- Declarations ------------------------------+instance Pretty HsDecl where+ pretty (HsTypeDecl loc name nameList htype) =+ blankline $+ markLine loc $+ mySep ( [text "type", pretty name]+ ++ map pretty nameList+ ++ [equals, pretty htype])++ pretty (HsDataDecl loc don context name nameList constrList derives) =+ blankline $+ markLine loc $+ mySep ( [pretty don, ppHsContext context, pretty name]+ ++ map pretty nameList)+ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppHsDeriving derives)++ pretty (HsGDataDecl loc don context name nameList optkind gadtList) =+ blankline $+ markLine loc $+ mySep ( [pretty don, ppHsContext context, pretty name]+ ++ map pretty nameList ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)++ pretty (HsTypeFamDecl loc name nameList optkind) =+ blankline $+ markLine loc $+ mySep ([text "type", text "family", pretty name]+ ++ map pretty nameList+ ++ ppOptKind optkind)+ + pretty (HsDataFamDecl loc context name nameList optkind) =+ blankline $+ markLine loc $+ mySep ( [text "data", text "family", ppHsContext context, pretty name]+ ++ map pretty nameList ++ ppOptKind optkind)++ pretty (HsTypeInsDecl loc ntype htype) =+ blankline $+ markLine loc $+ mySep [text "type", text "instance", pretty ntype, equals, pretty htype]+ + pretty (HsDataInsDecl loc don ntype constrList derives) =+ blankline $+ markLine loc $+ mySep [pretty don, text "instance", pretty ntype]+ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppHsDeriving derives)++ pretty (HsGDataInsDecl loc don ntype optkind gadtList) =+ blankline $+ markLine loc $+ mySep ( [pretty don, text "instance", pretty ntype]+ ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)+++{- pretty (HsNewTypeDecl pos context name nameList constr derives) =+ blankline $+ markLine pos $+ mySep ( [text "newtype", ppHsContext context, pretty name]+ ++ map pretty nameList)+ <+> equals <+> (pretty constr $$$ ppHsDeriving derives)+-}+ --m{spacing=False}+ -- special case for empty class declaration+ pretty (HsClassDecl pos context name nameList fundeps []) =+ blankline $+ markLine pos $+ mySep ( [text "class", ppHsContext context, pretty name]+ ++ map pretty nameList ++ [ppFunDeps fundeps])+ pretty (HsClassDecl pos context name nameList fundeps declList) =+ blankline $+ markLine pos $+ mySep ( [text "class", ppHsContext context, pretty name]+ ++ map pretty nameList ++ [ppFunDeps fundeps, text "where"])+ $$$ ppBody classIndent (map pretty declList)++ -- m{spacing=False}+ -- special case for empty instance declaration+ pretty (HsInstDecl pos context name args []) =+ blankline $+ markLine pos $+ mySep ( [text "instance", ppHsContext context, pretty name]+ ++ map ppHsAType args)+ pretty (HsInstDecl pos context name args declList) =+ blankline $+ markLine pos $+ mySep ( [text "instance", ppHsContext context, pretty name]+ ++ map ppHsAType args ++ [text "where"])+ $$$ ppBody classIndent (map pretty declList)++ pretty (HsDerivDecl pos context name args) =+ blankline $+ markLine pos $+ mySep ( [text "deriving", text "instance", ppHsContext context, pretty name]+ ++ map ppHsAType args)+ pretty (HsDefaultDecl pos htypes) =+ blankline $+ markLine pos $+ text "default" <+> parenList (map pretty htypes)++ pretty (HsSpliceDecl pos splice) =+ blankline $+ markLine pos $+ pretty splice++ pretty (HsTypeSig pos nameList qualType) =+ blankline $+ markLine pos $+ mySep ((punctuate comma . map pretty $ nameList)+ ++ [text "::", pretty qualType])++ pretty (HsFunBind matches) =+ foldr ($$$) empty (map pretty matches)++ pretty (HsPatBind pos pat rhs whereBinds) =+ markLine pos $+ myFsep [pretty pat, pretty rhs] $$$ ppWhere whereBinds++ pretty (HsInfixDecl pos assoc prec opList) =+ blankline $+ markLine pos $+ mySep ([pretty assoc, int prec]+ ++ (punctuate comma . map pretty $ opList))++ pretty (HsForImp pos cconv saf str name typ) =+ blankline $+ markLine pos $+ mySep [text "foreign import", pretty cconv, pretty saf,+ text (show str), pretty name, text "::", pretty typ]++ pretty (HsForExp pos cconv str name typ) =+ blankline $+ markLine pos $+ mySep [text "foreign export", pretty cconv,+ text (show str), pretty name, text "::", pretty typ]++instance Pretty DataOrNew where+ pretty DataType = text "data"+ pretty NewType = text "newtype"++instance Pretty HsAssoc where+ pretty HsAssocNone = text "infix"+ pretty HsAssocLeft = text "infixl"+ pretty HsAssocRight = text "infixr"++instance Pretty HsMatch where+ pretty (HsMatch pos f ps rhs whereBinds) =+ markLine pos $+ myFsep (lhs ++ [pretty rhs])+ $$$ ppWhere whereBinds+ where+ lhs = case ps of+ l:r:ps' | isSymbolName f ->+ let hd = [pretty l, ppHsName f, pretty r] in+ if null ps' then hd+ else parens (myFsep hd) : map (prettyPrec 2) ps'+ _ -> pretty f : map (prettyPrec 2) ps++ppWhere :: HsBinds -> Doc+ppWhere (HsBDecls []) = empty+ppWhere (HsBDecls l) = nest 2 (text "where" $$$ ppBody whereIndent (map pretty l))+ppWhere (HsIPBinds b) = nest 2 (text "where" $$$ ppBody whereIndent (map pretty b))+++instance Pretty HsClassDecl where+ pretty (HsClsDecl decl) = pretty decl++ pretty (HsClsDataFam loc context name nameList optkind) =+ markLine loc $+ mySep ( [text "data", ppHsContext context, pretty name]+ ++ map pretty nameList ++ ppOptKind optkind)++ pretty (HsClsTyFam loc name nameList optkind) =+ markLine loc $+ mySep ( [text "type", pretty name]+ ++ map pretty nameList ++ ppOptKind optkind)+ + pretty (HsClsTyDef loc ntype htype) =+ markLine loc $+ mySep [text "type", pretty ntype, equals, pretty htype] ++instance Pretty HsInstDecl where+ pretty (HsInsDecl decl) = pretty decl++ pretty (HsInsType loc ntype htype) =+ markLine loc $+ mySep [text "type", pretty ntype, equals, pretty htype]++ pretty (HsInsData loc don ntype constrList derives) =+ markLine loc $+ mySep [pretty don, pretty ntype]+ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppHsDeriving derives)++ pretty (HsInsGData loc don ntype optkind gadtList) =+ markLine loc $+ mySep ( [pretty don, pretty ntype]+ ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)+++------------------------- FFI stuff -------------------------------------+instance Pretty HsSafety where+ pretty PlayRisky = text "unsafe"+ pretty (PlaySafe b) = text $ if b then "threadsafe" else "safe"++instance Pretty HsCallConv where+ pretty StdCall = text "stdcall"+ pretty CCall = text "ccall"++------------------------- Data & Newtype Bodies -------------------------+instance Pretty HsQualConDecl where+ pretty (HsQualConDecl _pos tvs ctxt con) =+ myFsep [ppForall (Just tvs), ppHsContext ctxt, pretty con]++instance Pretty HsGadtDecl where+ pretty (HsGadtDecl _pos name ty) =+ myFsep [pretty name, text "::", pretty ty]++instance Pretty HsConDecl where+ pretty (HsRecDecl name fieldList) =+ pretty name <> (braceList . map ppField $ fieldList)++ pretty (HsConDecl name@(HsSymbol _) [l, r]) =+ myFsep [prettyPrec prec_btype l, ppHsName name,+ prettyPrec prec_btype r]+ pretty (HsConDecl name typeList) =+ mySep $ ppHsName name : map (prettyPrec prec_atype) typeList++ppField :: ([HsName],HsBangType) -> Doc+ppField (names, ty) =+ myFsepSimple $ (punctuate comma . map pretty $ names) +++ [text "::", pretty ty]++instance Pretty HsBangType where+ prettyPrec _ (HsBangedTy ty) = char '!' <> ppHsAType ty+ prettyPrec p (HsUnBangedTy ty) = prettyPrec p ty++ppHsDeriving :: [HsQName] -> Doc+ppHsDeriving [] = empty+ppHsDeriving [d] = text "deriving" <+> ppHsQName d+ppHsDeriving ds = text "deriving" <+> parenList (map ppHsQName ds)++------------------------- Types -------------------------+{-+instance Pretty HsQualType where+ pretty (HsQualType context htype) =+ myFsep [ppHsContext context, pretty htype]+-}+ppHsBType :: HsType -> Doc+ppHsBType = prettyPrec prec_btype++ppHsAType :: HsType -> Doc+ppHsAType = prettyPrec prec_atype++-- precedences for types+prec_btype, prec_atype :: Int+prec_btype = 1 -- left argument of ->,+ -- or either argument of an infix data constructor+prec_atype = 2 -- argument of type or data constructor, or of a class++instance Pretty HsType where+ prettyPrec p (HsTyForall mtvs ctxt htype) = parensIf (p > 0) $+ myFsep [ppForall mtvs, ppHsContext ctxt, pretty htype]+ prettyPrec p (HsTyFun a b) = parensIf (p > 0) $+ myFsep [ppHsBType a, text "->", pretty b]+ prettyPrec _ (HsTyTuple bxd l) =+ let ds = map pretty l+ in case bxd of+ Boxed -> parenList ds+ Unboxed -> hashParenList ds+ prettyPrec p (HsTyApp a b)+ | a == list_tycon = brackets $ pretty b -- special case+ | otherwise = parensIf (p > prec_btype) $+ myFsep [pretty a, ppHsAType b]+ prettyPrec _ (HsTyVar name) = pretty name+ prettyPrec _ (HsTyCon name) = pretty name+ prettyPrec _ (HsTyPred asst) = pretty asst+ prettyPrec _ (HsTyInfix a op b) = parens (myFsep [pretty op, pretty a, pretty b])+ prettyPrec _ (HsTyKind t k) = parens (myFsep [pretty t, text "::", pretty k])+++instance Pretty HsTyVarBind where+ pretty (HsKindedVar var kind) = myFsep [pretty var, text "::", pretty kind]+ pretty (HsUnkindedVar var) = pretty var++ppForall :: Maybe [HsTyVarBind] -> Doc+ppForall Nothing = empty+ppForall (Just []) = empty+ppForall (Just vs) = myFsep (text "forall" : map pretty vs ++ [char '.'])++---------------------------- Kinds ----------------------------++instance Pretty HsKind where+ pretty HsKindStar = text "*"+ pretty HsKindBang = text "!"+ pretty (HsKindFn a b) = myFsep [pretty a, text "->", pretty b]++ppOptKind :: Maybe HsKind -> [Doc]+ppOptKind Nothing = []+ppOptKind (Just k) = [text "::", pretty k]++------------------- Functional Dependencies -------------------+instance Pretty HsFunDep where+ pretty (HsFunDep from to) =+ myFsep $ map pretty from ++ [text "->"] ++ map pretty to+++ppFunDeps :: [HsFunDep] -> Doc+ppFunDeps [] = empty+ppFunDeps fds = myFsep $ (char '|':) . punctuate comma . map pretty $ fds++------------------------- Expressions -------------------------+instance Pretty HsRhs where+ pretty (HsUnGuardedRhs e) = equals <+> pretty e+ pretty (HsGuardedRhss guardList) = myVcat . map pretty $ guardList++instance Pretty HsGuardedRhs where+ pretty (HsGuardedRhs _pos guards ppBody) =+ myFsep $ [char '|'] ++ (punctuate comma . map pretty $ guards) ++ [equals, pretty ppBody]++instance Pretty HsLiteral where+ pretty (HsInt i) = integer i+ pretty (HsChar c) = text (show c)+ pretty (HsString s) = text (show s)+ pretty (HsFrac r) = double (fromRational r)+ -- GHC unboxed literals:+ pretty (HsCharPrim c) = text (show c) <> char '#'+ pretty (HsStringPrim s) = text (show s) <> char '#'+ pretty (HsIntPrim i) = integer i <> char '#'+ pretty (HsFloatPrim r) = float (fromRational r) <> char '#'+ pretty (HsDoublePrim r) = double (fromRational r) <> text "##"++instance Pretty HsExp where+ pretty (HsLit l) = pretty l+ -- lambda stuff+ pretty (HsInfixApp a op b) = myFsep [pretty a, pretty op, pretty b]+ pretty (HsNegApp e) = myFsep [char '-', pretty e]+ pretty (HsApp a b) = myFsep [pretty a, pretty b]+ pretty (HsLambda _loc expList ppBody) = myFsep $+ char '\\' : map pretty expList ++ [text "->", pretty ppBody]+ -- keywords+ -- two cases for lets+ pretty (HsLet (HsBDecls declList) letBody) =+ ppLetExp declList letBody+ pretty (HsLet (HsIPBinds bindList) letBody) =+ ppLetExp bindList letBody+ pretty (HsDLet bindList letBody) =+ myFsep [text "dlet" <+> ppBody letIndent (map pretty bindList),+ text "in", pretty letBody]+ pretty (HsWith exp bindList) =+ pretty exp $$$ ppWith bindList+ pretty (HsIf cond thenexp elsexp) =+ myFsep [text "if", pretty cond,+ text "then", pretty thenexp,+ text "else", pretty elsexp]+ pretty (HsCase cond altList) =+ myFsep [text "case", pretty cond, text "of"]+ $$$ ppBody caseIndent (map pretty altList)+ pretty (HsDo stmtList) =+ text "do" $$$ ppBody doIndent (map pretty stmtList)+ pretty (HsMDo stmtList) =+ text "mdo" $$$ ppBody doIndent (map pretty stmtList)+ -- Constructors & Vars+ pretty (HsVar name) = pretty name+ pretty (HsIPVar ipname) = pretty ipname+ pretty (HsCon name) = pretty name+ pretty (HsTuple expList) = parenList . map pretty $ expList+ -- weird stuff+ pretty (HsParen e) = parens . pretty $ e+ pretty (HsLeftSection e op) = parens (pretty e <+> pretty op)+ pretty (HsRightSection op e) = parens (pretty op <+> pretty e)+ pretty (HsRecConstr c fieldList) =+ pretty c <> (braceList . map pretty $ fieldList)+ pretty (HsRecUpdate e fieldList) =+ pretty e <> (braceList . map pretty $ fieldList)+ -- patterns+ -- special case that would otherwise be buggy+ pretty (HsAsPat name (HsIrrPat e)) =+ myFsep [pretty name <> char '@', char '~' <> pretty e]+ pretty (HsAsPat name e) = hcat [pretty name, char '@', pretty e]+ pretty HsWildCard = char '_'+ pretty (HsIrrPat e) = char '~' <> pretty e+ -- Lists+ pretty (HsList list) =+ bracketList . punctuate comma . map pretty $ list+ pretty (HsEnumFrom e) =+ bracketList [pretty e, text ".."]+ pretty (HsEnumFromTo from to) =+ bracketList [pretty from, text "..", pretty to]+ pretty (HsEnumFromThen from thenE) =+ bracketList [pretty from <> comma, pretty thenE, text ".."]+ pretty (HsEnumFromThenTo from thenE to) =+ bracketList [pretty from <> comma, pretty thenE,+ text "..", pretty to]+ pretty (HsListComp e stmtList) =+ bracketList ([pretty e, char '|']+ ++ (punctuate comma . map pretty $ stmtList))+ pretty (HsExpTypeSig _pos e ty) =+ myFsep [pretty e, text "::", pretty ty]+ -- Template Haskell+ pretty (HsReifyExp r) = pretty r+ pretty (HsBracketExp b) = pretty b+ pretty (HsSpliceExp s) = pretty s+ -- regular patterns+ pretty (HsRPats _ rs) =+ myFsep $ text "[/" : map pretty rs ++ [text "/]"]+ pretty (HsSeqRP rs) =+ myFsep $ text "(/" : map pretty rs ++ [text "/)"]+ pretty (HsStarRP r) = pretty r <> char '*'+ pretty (HsStarGRP r) = pretty r <> text "*!"+ pretty (HsPlusRP r) = pretty r <> char '+'+ pretty (HsPlusGRP r) = pretty r <> text "+!"+ pretty (HsOptRP r) = pretty r <> char '?'+ pretty (HsOptGRP r) = pretty r <> text "?!"+ pretty (HsEitherRP r1 r2) = parens . myFsep $+ [pretty r1, char '|', pretty r2]+ -- special case that would otherwise be buggy+ pretty (HsCAsRP n (HsIrrPat e)) =+ myFsep [pretty n <> text "@:", char '~' <> pretty e]+ pretty (HsCAsRP n r) = hcat [pretty n, text "@:", pretty r]+ -- Hsx+ pretty (HsXTag _ n attrs mattr cs) =+ let ax = maybe [] (return . pretty) mattr+ in hcat $+ (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):+ map pretty cs ++ [myFsep $ [text "</" <> pretty n, char '>']]+ pretty (HsXETag _ n attrs mattr) =+ let ax = maybe [] (return . pretty) mattr+ in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [text "/>"]+ pretty (HsXPcdata s) = text s+ pretty (HsXExpTag e) =+ myFsep $ [text "<%", pretty e, text "%>"]++instance Pretty HsXAttr where+ pretty (HsXAttr n v) =+ myFsep [pretty n, char '=', pretty v]++instance Pretty HsXName where+ pretty (HsXName n) = text n+ pretty (HsXDomName d n) = text d <> char ':' <> text n++--ppLetExp :: [HsDecl] -> HsExp -> Doc+ppLetExp l b = myFsep [text "let" <+> ppBody letIndent (map pretty l),+ text "in", pretty b]++ppWith binds = nest 2 (text "with" $$$ ppBody withIndent (map pretty binds))+withIndent = whereIndent++--------------------- Template Haskell -------------------------+instance Pretty HsReify where+ pretty (HsReifyDecl name) = ppReify "reifyDecl" name+ pretty (HsReifyType name) = ppReify "reifyType" name+ pretty (HsReifyFixity name) = ppReify "reifyFixity" name++ppReify t n = myFsep [text t, pretty n]++instance Pretty HsBracket where+ pretty (HsExpBracket e) = ppBracket "[|" e+ pretty (HsPatBracket p) = ppBracket "[p|" p+ pretty (HsTypeBracket t) = ppBracket "[t|" t+ pretty (HsDeclBracket d) =+ myFsep $ text "[d|" : map pretty d ++ [text "|]"]++ppBracket o x = myFsep [text o, pretty x, text "|]"]++instance Pretty HsSplice where+ pretty (HsIdSplice s) = char '$' <> text s+ pretty (HsParenSplice e) =+ myFsep [text "$(", pretty e, char ')']++------------------------- Patterns -----------------------------++instance Pretty HsPat where+ prettyPrec _ (HsPVar name) = pretty name+ prettyPrec _ (HsPLit lit) = pretty lit+ prettyPrec _ (HsPNeg p) = myFsep [char '-', pretty p]+ prettyPrec p (HsPInfixApp a op b) = parensIf (p > 0) $+ myFsep [pretty a, pretty (HsQConOp op), pretty b]+ prettyPrec p (HsPApp n ps) = parensIf (p > 1) $+ myFsep (pretty n : map pretty ps)+ prettyPrec _ (HsPTuple ps) = parenList . map pretty $ ps+ prettyPrec _ (HsPList ps) =+ bracketList . punctuate comma . map pretty $ ps+ prettyPrec _ (HsPParen p) = parens . pretty $ p+ prettyPrec _ (HsPRec c fields) =+ pretty c <> (braceList . map pretty $ fields)+ -- special case that would otherwise be buggy+ prettyPrec _ (HsPAsPat name (HsPIrrPat pat)) =+ myFsep [pretty name <> char '@', char '~' <> pretty pat]+ prettyPrec _ (HsPAsPat name pat) =+ hcat [pretty name, char '@', pretty pat]+ prettyPrec _ HsPWildCard = char '_'+ prettyPrec _ (HsPIrrPat pat) = char '~' <> pretty pat+ prettyPrec _ (HsPRPat _ rs) =+ myFsep $ text "[/" : map pretty rs ++ [text "/]"]+ prettyPrec _ (HsPatTypeSig _pos pat ty) =+ myFsep [pretty pat, text "::", pretty ty]++ -- Hsx+ prettyPrec _ (HsPXTag _ n attrs mattr cp) =+ let ap = maybe [] (return . pretty) mattr+ in hcat $ -- TODO: should not introduce blanks+ (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [char '>']):+ prettyChildren cp ++ [myFsep $ [text "</" <> pretty n, char '>']]+ prettyPrec _ (HsPXETag _ n attrs mattr) =+ let ap = maybe [] (return . pretty) mattr+ in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [text "/>"]+ prettyPrec _ (HsPXPcdata s) = text s+ prettyPrec _ (HsPXPatTag p) =+ myFsep $ [text "<%", pretty p, text "%>"]++prettyChildren :: HsPat -> [Doc]+prettyChildren p = case p of+ HsPList ps -> map prettyChild ps+ HsPRPat _ _ -> [pretty p]+ _ -> error "The pattern representing the children of an xml pattern \+ \ should always be a list."++prettyChild :: HsPat -> Doc+prettyChild p = case p of+ HsPXTag _ _ _ _ _ -> pretty p+ HsPXETag _ _ _ _ -> pretty p+ HsPXPatTag _ -> pretty p+ HsPXPcdata _ -> pretty p+ _ -> pretty $ HsPXPatTag p++instance Pretty HsPXAttr where+ pretty (HsPXAttr n p) =+ myFsep [pretty n, char '=', pretty p]++instance Pretty HsPatField where+ pretty (HsPFieldPat name pat) =+ myFsep [pretty name, equals, pretty pat]++--------------------- Regular Patterns -------------------------++instance Pretty HsRPat where+ pretty (HsRPStar r) = pretty r <> char '*'+ pretty (HsRPStarG r) = pretty r <> text "*!"+ pretty (HsRPPlus r) = pretty r <> char '+'+ pretty (HsRPPlusG r) = pretty r <> text "+!"+ pretty (HsRPOpt r) = pretty r <> char '?'+ pretty (HsRPOptG r) = pretty r <> text "?!"+ pretty (HsRPEither r1 r2) = parens . myFsep $+ [pretty r1, char '|', pretty r2]+ pretty (HsRPSeq rs) =+ myFsep $ text "(/" : map pretty rs ++ [text "/)"]+ -- special case that would otherwise be buggy+ pretty (HsRPCAs n (HsRPPat (HsPIrrPat p))) =+ myFsep [pretty n <> text "@:", char '~' <> pretty p]+ pretty (HsRPCAs n r) = hcat [pretty n, text "@:", pretty r]+ -- special case that would otherwise be buggy+ pretty (HsRPAs n (HsRPPat (HsPIrrPat p))) =+ myFsep [pretty n <> text "@:", char '~' <> pretty p]+ pretty (HsRPAs n r) = hcat [pretty n, char '@', pretty r]+ pretty (HsRPPat p) = pretty p+ pretty (HsRPParen rp) = parens . pretty $ rp++------------------------- Case bodies -------------------------+instance Pretty HsAlt where+ pretty (HsAlt _pos e gAlts binds) =+ pretty e <+> pretty gAlts $$$ ppWhere binds++instance Pretty HsGuardedAlts where+ pretty (HsUnGuardedAlt e) = text "->" <+> pretty e+ pretty (HsGuardedAlts altList) = myVcat . map pretty $ altList++instance Pretty HsGuardedAlt where+ pretty (HsGuardedAlt _pos guards body) =+ myFsep $ char '|': (punctuate comma . map pretty $ guards) ++ [text "->", pretty body]++------------------------- Statements in monads, guards & list comprehensions -----+instance Pretty HsStmt where+ pretty (HsGenerator _loc e from) =+ pretty e <+> text "<-" <+> pretty from+ pretty (HsQualifier e) = pretty e+ -- two cases for lets+ pretty (HsLetStmt (HsBDecls declList)) =+ ppLetStmt declList+ pretty (HsLetStmt (HsIPBinds bindList)) =+ ppLetStmt bindList++ppLetStmt l = text "let" $$$ ppBody letIndent (map pretty l)++------------------------- Record updates+instance Pretty HsFieldUpdate where+ pretty (HsFieldUpdate name e) =+ myFsep [pretty name, equals, pretty e]++------------------------- Names -------------------------+instance Pretty HsQOp where+ pretty (HsQVarOp n) = ppHsQNameInfix n+ pretty (HsQConOp n) = ppHsQNameInfix n++ppHsQNameInfix :: HsQName -> Doc+ppHsQNameInfix name+ | isSymbolName (getName name) = ppHsQName name+ | otherwise = char '`' <> ppHsQName name <> char '`'++instance Pretty HsQName where+ pretty name = case name of+ UnQual (HsSymbol ('#':_)) -> char '(' <+> ppHsQName name <+> char ')'+ _ -> parensIf (isSymbolName (getName name)) (ppHsQName name)++ppHsQName :: HsQName -> Doc+ppHsQName (UnQual name) = ppHsName name+ppHsQName (Qual m name) = pretty m <> char '.' <> ppHsName name+ppHsQName (Special sym) = text (specialName sym)++instance Pretty HsOp where+ pretty (HsVarOp n) = ppHsNameInfix n+ pretty (HsConOp n) = ppHsNameInfix n++ppHsNameInfix :: HsName -> Doc+ppHsNameInfix name+ | isSymbolName name = ppHsName name+ | otherwise = char '`' <> ppHsName name <> char '`'++instance Pretty HsName where+ pretty name = case name of+ HsSymbol ('#':_) -> char '(' <+> ppHsName name <+> char ')'+ _ -> parensIf (isSymbolName name) (ppHsName name)++ppHsName :: HsName -> Doc+ppHsName (HsIdent s) = text s+ppHsName (HsSymbol s) = text s++instance Pretty HsIPName where+ pretty (HsIPDup s) = char '?' <> text s+ pretty (HsIPLin s) = char '%' <> text s++instance Pretty HsIPBind where+ pretty (HsIPBind _loc ipname exp) =+ myFsep [pretty ipname, equals, pretty exp]++instance Pretty HsCName where+ pretty (HsVarName n) = pretty n+ pretty (HsConName n) = pretty n++isSymbolName :: HsName -> Bool+isSymbolName (HsSymbol _) = True+isSymbolName _ = False++getName :: HsQName -> HsName+getName (UnQual s) = s+getName (Qual _ s) = s+getName (Special HsCons) = HsSymbol ":"+getName (Special HsFunCon) = HsSymbol "->"+getName (Special s) = HsIdent (specialName s)++specialName :: HsSpecialCon -> String+specialName HsUnitCon = "()"+specialName HsListCon = "[]"+specialName HsFunCon = "->"+specialName (HsTupleCon n) = "(" ++ replicate (n-1) ',' ++ ")"+specialName HsCons = ":"++ppHsContext :: HsContext -> Doc+ppHsContext [] = empty+ppHsContext context = mySep [parenList (map pretty context), text "=>"]++-- hacked for multi-parameter type classes+instance Pretty HsAsst where+ pretty (HsClassA a ts) = myFsep $ ppHsQName a : map ppHsAType ts+ pretty (HsIParam i t) = myFsep $ [pretty i, text "::", pretty t]++------------------------- pp utils -------------------------+maybePP :: (a -> Doc) -> Maybe a -> Doc+maybePP pp Nothing = empty+maybePP pp (Just a) = pp a++parenList :: [Doc] -> Doc+parenList = parens . myFsepSimple . punctuate comma++hashParenList :: [Doc] -> Doc+hashParenList = hashParens . myFsepSimple . punctuate comma+ where hashParens = parens . hashes+ hashes = \doc -> char '#' <> doc <> char '#'++braceList :: [Doc] -> Doc+braceList = braces . myFsepSimple . punctuate comma++bracketList :: [Doc] -> Doc+bracketList = brackets . myFsepSimple++-- Wrap in braces and semicolons, with an extra space at the start in+-- case the first doc begins with "-", which would be scanned as {-+flatBlock :: [Doc] -> Doc+flatBlock = braces . (space <>) . hsep . punctuate semi++-- Same, but put each thing on a separate line+prettyBlock :: [Doc] -> Doc+prettyBlock = braces . (space <>) . vcat . punctuate semi++-- Monadic PP Combinators -- these examine the env++blankline :: Doc -> Doc+blankline dl = do{e<-getPPEnv;if spacing e && layout e /= PPNoLayout+ then space $$ dl else dl}+topLevel :: Doc -> [Doc] -> Doc+topLevel header dl = do+ e <- fmap layout getPPEnv+ case e of+ PPOffsideRule -> header $$ vcat dl+ PPSemiColon -> header $$ prettyBlock dl+ PPInLine -> header $$ prettyBlock dl+ PPNoLayout -> header <+> flatBlock dl++ppBody :: (PPHsMode -> Int) -> [Doc] -> Doc+ppBody f dl = do+ e <- fmap layout getPPEnv+ case e of PPOffsideRule -> indent+ PPSemiColon -> indentExplicit+ _ -> flatBlock dl+ where+ indent = do{i <-fmap f getPPEnv;nest i . vcat $ dl}+ indentExplicit = do {i <- fmap f getPPEnv;+ nest i . prettyBlock $ dl}++($$$) :: Doc -> Doc -> Doc+a $$$ b = layoutChoice (a $$) (a <+>) b++mySep :: [Doc] -> Doc+mySep = layoutChoice mySep' hsep+ where+ -- ensure paragraph fills with indentation.+ mySep' [x] = x+ mySep' (x:xs) = x <+> fsep xs+ mySep' [] = error "Internal error: mySep"++myVcat :: [Doc] -> Doc+myVcat = layoutChoice vcat hsep++myFsepSimple :: [Doc] -> Doc+myFsepSimple = layoutChoice fsep hsep++-- same, except that continuation lines are indented,+-- which is necessary to avoid triggering the offside rule.+myFsep :: [Doc] -> Doc+myFsep = layoutChoice fsep' hsep+ where fsep' [] = empty+ fsep' (d:ds) = do+ e <- getPPEnv+ let n = onsideIndent e+ nest n (fsep (nest (-n) d:ds))++layoutChoice :: (a -> Doc) -> (a -> Doc) -> a -> Doc+layoutChoice a b dl = do e <- getPPEnv+ if layout e == PPOffsideRule ||+ layout e == PPSemiColon+ then a dl else b dl++-- Prefix something with a LINE pragma, if requested.+-- GHC's LINE pragma actually sets the current line number to n-1, so+-- that the following line is line n. But if there's no newline before+-- the line we're talking about, we need to compensate by adding 1.++markLine :: SrcLoc -> Doc -> Doc+markLine loc doc = do+ e <- getPPEnv+ let y = srcLine loc+ let line l =+ text ("{-# LINE " ++ show l ++ " \"" ++ srcFilename loc ++ "\" #-}")+ if linePragmas e then layoutChoice (line y $$) (line (y+1) <+>) doc+ else doc
+ Language/Haskell/Exts/Syntax.hs view
@@ -0,0 +1,852 @@+{-# OPTIONS_GHC -fglasgow-exts -cpp #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Syntax+-- Original : Language.Haskell.Syntax+-- Copyright : (c) Niklas Broberg 2004,+-- (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+-- +-- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se+-- Stability : experimental+-- Portability : portable+--+-- A suite of datatypes describing the abstract syntax of Haskell 98+-- <http://www.haskell.org/onlinereport/> plus some extensions:+--+-- * multi-parameter type classes with functional dependencies+--+-- * parameters of type class assertions are unrestricted+--+-- * 'forall' types as universal and existential quantification+--+-- * pattern guards+--+-- * implicit parameters+--+-- * generalised algebraic data types+--+-- * template haskell+--+-- * empty data type declarations+--+-- * unboxed tuples+--+-- * regular patterns (HaRP)+--+-- * HSP-style XML expressions and patterns (HSP)+--+-- Also worth noting is that (n+k) patterns from Haskell 98 are not supported+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Syntax (+ -- * Modules+ HsModule(..), HsExportSpec(..),+ HsImportDecl(..), HsImportSpec(..), HsAssoc(..),+ -- * Declarations+ HsDecl(..), HsBinds(..), HsIPBind(..), + HsClassDecl(..), HsInstDecl(..),+ HsGadtDecl(..), HsConDecl(..), HsQualConDecl(..), HsBangType(..),+ HsMatch(..), HsRhs(..), HsGuardedRhs(..), DataOrNew(..),+ -- * Class Assertions and Contexts+ HsContext, HsFunDep(..), HsAsst(..),+ -- * Types+ HsType(..), HsBoxed(..), HsKind(..), HsTyVarBind(..),+ -- * Expressions+ HsExp(..), HsStmt(..), HsFieldUpdate(..),+ HsAlt(..), HsGuardedAlts(..), HsGuardedAlt(..), + -- * Patterns+ HsPat(..), HsPatField(..),+ -- * Literals+ HsLiteral(..),+ -- * Variables, Constructors and Operators+ Module(..), HsQName(..), HsName(..), HsQOp(..), HsOp(..),+ HsSpecialCon(..), HsCName(..), HsIPName(..),+ + -- * Template Haskell+ HsReify(..), HsBracket(..), HsSplice(..),+ + -- * HaRP+ HsRPat(..),+ + -- * Hsx+ HsXAttr(..), HsXName(..), HsPXAttr(..),++ -- * FFI+ HsSafety(..), HsCallConv(..),++ -- * Builtin names++ -- ** Modules+ prelude_mod, main_mod,+ -- ** Main function of a program+ main_name,+ -- ** Constructors+ unit_con_name, tuple_con_name, list_cons_name,+ unit_con, tuple_con,+ -- ** Special identifiers+ as_name, qualified_name, hiding_name, minus_name, pling_name, dot_name, star_name,+ export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name,+ -- ** Type constructors+ unit_tycon_name, fun_tycon_name, list_tycon_name, tuple_tycon_name,+ unit_tycon, fun_tycon, list_tycon, tuple_tycon,++ -- * Source coordinates+ SrcLoc(..),+ ) where+++#ifdef __GLASGOW_HASKELL__+import Data.Generics.Basics+import Data.Generics.Instances+#endif++-- | A position in the source.+data SrcLoc = SrcLoc {+ srcFilename :: String,+ srcLine :: Int,+ srcColumn :: Int+ }+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif+ +-- | The name of a Haskell module.+newtype Module = Module String+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | Constructors with special syntax.+-- These names are never qualified, and always refer to builtin type or+-- data constructors.++data HsSpecialCon+ = HsUnitCon -- ^ unit type and data constructor @()@+ | HsListCon -- ^ list type constructor @[]@+ | HsFunCon -- ^ function type constructor @->@+ | HsTupleCon Int -- ^ /n/-ary tuple type and data+ -- constructors @(,)@ etc+ | HsCons -- ^ list data constructor @(:)@+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | This type is used to represent qualified variables, and also+-- qualified constructors.+data HsQName+ = Qual Module HsName -- ^ name qualified with a module name+ | UnQual HsName -- ^ unqualified name+ | Special HsSpecialCon -- ^ built-in constructor with special syntax+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | This type is used to represent variables, and also constructors.+data HsName+ = HsIdent String -- ^ /varid/ or /conid/.+ | HsSymbol String -- ^ /varsym/ or /consym/+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | This type is used to represent implicit parameter names.+data HsIPName+ = HsIPDup String -- ?x+ | HsIPLin String -- %x+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | Possibly qualified infix operators (/qop/), appearing in expressions.+data HsQOp+ = HsQVarOp HsQName -- ^ variable operator (/qvarop/)+ | HsQConOp HsQName -- ^ constructor operator (/qconop/)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | Operators, appearing in @infix@ declarations.+data HsOp+ = HsVarOp HsName -- ^ variable operator (/varop/)+ | HsConOp HsName -- ^ constructor operator (/conop/)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | A name (/cname/) of a component of a class or data type in an @import@+-- or export specification.+data HsCName+ = HsVarName HsName -- ^ name of a method or field+ | HsConName HsName -- ^ name of a data constructor+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | A Haskell source module.+data HsModule = HsModule SrcLoc Module (Maybe [HsExportSpec])+ [HsImportDecl] [HsDecl]+#ifdef __GLASGOW_HASKELL__+ deriving (Show,Typeable,Data)+#else+ deriving (Show)+#endif++-- | Export specification.+data HsExportSpec+ = HsEVar HsQName -- ^ variable+ | HsEAbs HsQName -- ^ @T@:+ -- a class or datatype exported abstractly,+ -- or a type synonym.+ | HsEThingAll HsQName -- ^ @T(..)@:+ -- a class exported with all of its methods, or+ -- a datatype exported with all of its constructors.+ | HsEThingWith HsQName [HsCName] -- ^ @T(C_1,...,C_n)@:+ -- a class exported with some of its methods, or+ -- a datatype exported with some of its constructors.+ | HsEModuleContents Module -- ^ @module M@:+ -- re-export a module.+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Import declaration.+data HsImportDecl = HsImportDecl+ { importLoc :: SrcLoc -- ^ position of the @import@ keyword.+ , importModule :: Module -- ^ name of the module imported.+ , importQualified :: Bool -- ^ imported @qualified@?+ , importAs :: Maybe Module -- ^ optional alias name in an+ -- @as@ clause.+ , importSpecs :: Maybe (Bool,[HsImportSpec])+ -- ^ optional list of import specifications.+ -- The 'Bool' is 'True' if the names are excluded+ -- by @hiding@.+ }+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Import specification.+data HsImportSpec+ = HsIVar HsName -- ^ variable+ | HsIAbs HsName -- ^ @T@:+ -- the name of a class, datatype or type synonym.+ | HsIThingAll HsName -- ^ @T(..)@:+ -- a class imported with all of its methods, or+ -- a datatype imported with all of its constructors.+ | HsIThingWith HsName [HsCName] -- ^ @T(C_1,...,C_n)@:+ -- a class imported with some of its methods, or+ -- a datatype imported with some of its constructors.+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Associativity of an operator.+data HsAssoc+ = HsAssocNone -- ^ non-associative operator (declared with @infix@)+ | HsAssocLeft -- ^ left-associative operator (declared with @infixl@).+ | HsAssocRight -- ^ right-associative operator (declared with @infixr@)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsDecl+ = HsTypeDecl SrcLoc HsName [HsName] HsType+ | HsDataDecl SrcLoc DataOrNew HsContext HsName [HsName] [HsQualConDecl] [HsQName]+ | HsGDataDecl SrcLoc DataOrNew HsContext HsName [HsName] (Maybe HsKind) [HsGadtDecl] {-no deriving-}+ | HsTypeFamDecl SrcLoc HsName [HsName] (Maybe HsKind)+ | HsDataFamDecl SrcLoc HsContext HsName [HsName] (Maybe HsKind)+ | HsTypeInsDecl SrcLoc HsType HsType+ | HsDataInsDecl SrcLoc DataOrNew HsType [HsQualConDecl] [HsQName]+ | HsGDataInsDecl SrcLoc DataOrNew HsType (Maybe HsKind) [HsGadtDecl] {-no deriving-}+ | HsInfixDecl SrcLoc HsAssoc Int [HsOp]+ | HsClassDecl SrcLoc HsContext HsName [HsName] [HsFunDep] [HsClassDecl]+ | HsInstDecl SrcLoc HsContext HsQName [HsType] [HsInstDecl]+ | HsDerivDecl SrcLoc HsContext HsQName [HsType]+ | HsDefaultDecl SrcLoc [HsType]+ | HsSpliceDecl SrcLoc HsSplice+ | HsTypeSig SrcLoc [HsName] HsType+ | HsFunBind [HsMatch]+ | HsPatBind SrcLoc HsPat HsRhs {-where-} HsBinds+ | HsForImp SrcLoc HsCallConv HsSafety String HsName HsType+ | HsForExp SrcLoc HsCallConv String HsName HsType+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data DataOrNew = DataType | NewType+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsBinds+ = HsBDecls [HsDecl]+ | HsIPBinds [HsIPBind]+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsIPBind = HsIPBind SrcLoc HsIPName HsExp+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Clauses of a function binding.+data HsMatch+ = HsMatch SrcLoc HsName [HsPat] HsRhs {-where-} HsBinds+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsQualConDecl+ = HsQualConDecl SrcLoc + {-forall-} [HsTyVarBind] {- . -} HsContext+ {- => -} HsConDecl+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsGadtDecl + = HsGadtDecl SrcLoc HsName HsType+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Declaration of a data constructor.+data HsConDecl+ = HsConDecl HsName [HsBangType]+ -- ^ ordinary data constructor+ | HsRecDecl HsName [([HsName],HsBangType)]+ -- ^ record constructor+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Declarations inside a class declaration+data HsClassDecl+ = HsClsDecl HsDecl+ | HsClsDataFam SrcLoc HsContext HsName [HsName] (Maybe HsKind)+ | HsClsTyFam SrcLoc HsName [HsName] (Maybe HsKind)+ | HsClsTyDef SrcLoc HsType HsType+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Declarations inside an instance declaration+data HsInstDecl+ = HsInsDecl HsDecl+ | HsInsType SrcLoc HsType HsType+ | HsInsData SrcLoc DataOrNew HsType [HsQualConDecl] [HsQName]+ | HsInsGData SrcLoc DataOrNew HsType (Maybe HsKind) [HsGadtDecl] {-no deriving-}+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | The type of a constructor argument or field, optionally including+-- a strictness annotation.+data HsBangType+ = HsBangedTy HsType -- ^ strict component, marked with \"@!@\"+ | HsUnBangedTy HsType -- ^ non-strict component+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | The right hand side of a function or pattern binding.+data HsRhs+ = HsUnGuardedRhs HsExp -- ^ unguarded right hand side (/exp/)+ | HsGuardedRhss [HsGuardedRhs]+ -- ^ guarded right hand side (/gdrhs/)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif+-- | A guarded right hand side @|@ /exp/ @=@ /exp/.+-- The first expression will be Boolean-valued.+data HsGuardedRhs+ = HsGuardedRhs SrcLoc [HsStmt] HsExp+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A type qualified with a context.+-- An unqualified type has an empty context.++data HsType+ = HsTyForall + (Maybe [HsTyVarBind])+ HsContext+ HsType+ | HsTyFun HsType HsType -- ^ function type+ | HsTyTuple HsBoxed [HsType] -- ^ tuple type, possibly boxed+ | HsTyApp HsType HsType -- ^ application of a type constructor+ | HsTyVar HsName -- ^ type variable+ | HsTyCon HsQName -- ^ named type or type constructor+ | HsTyPred HsAsst -- ^ assertion of an implicit parameter+ | HsTyInfix HsType HsQName HsType -- ^ infix type constructor+ | HsTyKind HsType HsKind -- ^ type with explicit kind signature+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsBoxed = Boxed | Unboxed+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsTyVarBind + = HsKindedVar HsName HsKind+ | HsUnkindedVar HsName+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsKind+ = HsKindStar+ | HsKindBang+ | HsKindFn HsKind HsKind+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif+ ++-- | A functional dependency, given on the form+-- l1 l2 ... ln -> r2 r3 .. rn+data HsFunDep+ = HsFunDep [HsName] [HsName]+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif+++type HsContext = [HsAsst]++-- | Class assertions.+-- In Haskell 98, the argument would be a /tyvar/, but this definition+-- allows multiple parameters, and allows them to be /type/s.+-- Also extended with support for implicit parameters.+data HsAsst = HsClassA HsQName [HsType]+ | HsIParam HsIPName HsType+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | /literal/+-- Values of this type hold the abstract value of the literal, not the+-- precise string representation used. For example, @10@, @0o12@ and @0xa@+-- have the same representation.+data HsLiteral+ = HsChar Char -- ^ character literal+ | HsString String -- ^ string literal+ | HsInt Integer -- ^ integer literal+ | HsFrac Rational -- ^ floating point literal+ | HsCharPrim Char -- ^ GHC unboxed character literal+ | HsStringPrim String -- ^ GHC unboxed string literal+ | HsIntPrim Integer -- ^ GHC unboxed integer literal+ | HsFloatPrim Rational -- ^ GHC unboxed float literal+ | HsDoublePrim Rational -- ^ GHC unboxed double literal+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Haskell expressions.+--+-- /Notes:/+--+-- * Because it is difficult for parsers to distinguish patterns from+-- expressions, they typically parse them in the same way and then check+-- that they have the appropriate form. Hence the expression type+-- includes some forms that are found only in patterns. After these+-- checks, these constructors should not be used.+--+-- * The parser does not take precedence and associativity into account,+-- so it will leave 'HsInfixApp's associated to the left.+--+-- * The 'Language.Haskell.Pretty.Pretty' instance for 'HsExp' does not+-- add parentheses in printing.++data HsExp+ = HsVar HsQName -- ^ variable+ | HsIPVar HsIPName -- ^ implicit parameter variable+ | HsCon HsQName -- ^ data constructor+ | HsLit HsLiteral -- ^ literal constant+ | HsInfixApp HsExp HsQOp HsExp -- ^ infix application+ | HsApp HsExp HsExp -- ^ ordinary application+ | HsNegApp HsExp -- ^ negation expression @-@ /exp/+ | HsLambda SrcLoc [HsPat] HsExp -- ^ lambda expression+ | HsLet HsBinds HsExp -- ^ local declarations with @let@+ | HsDLet [HsIPBind] HsExp -- ^ local declarations of implicit parameters (hugs)+ | HsWith HsExp [HsIPBind] -- ^ local declarations of implicit parameters+ | HsIf HsExp HsExp HsExp -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/+ | HsCase HsExp [HsAlt] -- ^ @case@ /exp/ @of@ /alts/+ | HsDo [HsStmt] -- ^ @do@-expression:+ -- the last statement in the list+ -- should be an expression.+ | HsMDo [HsStmt] -- ^ @mdo@-expression+ | HsTuple [HsExp] -- ^ tuple expression+ | HsList [HsExp] -- ^ list expression+ | HsParen HsExp -- ^ parenthesized expression+ | HsLeftSection HsExp HsQOp -- ^ left section @(@/exp/ /qop/@)@+ | HsRightSection HsQOp HsExp -- ^ right section @(@/qop/ /exp/@)@+ | HsRecConstr HsQName [HsFieldUpdate]+ -- ^ record construction expression+ | HsRecUpdate HsExp [HsFieldUpdate]+ -- ^ record update expression+ | HsEnumFrom HsExp -- ^ unbounded arithmetic sequence,+ -- incrementing by 1+ | HsEnumFromTo HsExp HsExp -- ^ bounded arithmetic sequence,+ -- incrementing by 1+ | HsEnumFromThen HsExp HsExp -- ^ unbounded arithmetic sequence,+ -- with first two elements given+ | HsEnumFromThenTo HsExp HsExp HsExp+ -- ^ bounded arithmetic sequence,+ -- with first two elements given+ | HsListComp HsExp [HsStmt] -- ^ list comprehension+ | HsExpTypeSig SrcLoc HsExp HsType+ -- ^ expression type signature+ | HsAsPat HsName HsExp -- ^ patterns only+ | HsWildCard -- ^ patterns only+ | HsIrrPat HsExp -- ^ patterns only++-- HaRP+ | HsRPats SrcLoc [HsExp] -- ^ regular patterns only+ | HsSeqRP [HsExp] -- ^ regular patterns only+ | HsStarRP HsExp -- ^ regular patterns only+ | HsStarGRP HsExp -- ^ regular patterns only+ | HsPlusRP HsExp -- ^ regular patterns only+ | HsPlusGRP HsExp -- ^ regular patterns only+ | HsOptRP HsExp -- ^ regular patterns only+ | HsOptGRP HsExp -- ^ regular patterns only+ | HsEitherRP HsExp HsExp -- ^ regular patterns only+ | HsCAsRP HsName HsExp -- ^ regular patterns only+ +-- Template Haskell+ | HsReifyExp HsReify+ | HsBracketExp HsBracket+ | HsSpliceExp HsSplice+ +-- Hsx+ | HsXTag SrcLoc HsXName [HsXAttr] (Maybe HsExp) [HsExp]+ | HsXETag SrcLoc HsXName [HsXAttr] (Maybe HsExp)+ | HsXPcdata String+ | HsXExpTag HsExp+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsXName + = HsXName String -- <name ...+ | HsXDomName String String -- <dom:name ...+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsXAttr = HsXAttr HsXName HsExp+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsReify + = HsReifyType HsQName+ | HsReifyDecl HsQName+ | HsReifyFixity HsQName+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif+ +data HsBracket+ = HsExpBracket HsExp+ | HsPatBracket HsPat+ | HsTypeBracket HsType+ | HsDeclBracket [HsDecl]+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsSplice+ = HsIdSplice String+ | HsParenSplice HsExp+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif+++-- FFI stuff+data HsSafety+ = PlayRisky+ | PlaySafe Bool+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsCallConv+ = StdCall+ | CCall+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++++-- | A pattern, to be matched against a value.+data HsPat+ = HsPVar HsName -- ^ variable+ | HsPLit HsLiteral -- ^ literal constant+ | HsPNeg HsPat -- ^ negated pattern+ | HsPInfixApp HsPat HsQName HsPat+ -- ^ pattern with infix data constructor+ | HsPApp HsQName [HsPat] -- ^ data constructor and argument+ -- patterns+ | HsPTuple [HsPat] -- ^ tuple pattern+ | HsPList [HsPat] -- ^ list pattern+ | HsPParen HsPat -- ^ parenthesized pattern+ | HsPRec HsQName [HsPatField] -- ^ labelled pattern+ | HsPAsPat HsName HsPat -- ^ @\@@-pattern+ | HsPWildCard -- ^ wildcard pattern (@_@)+ | HsPIrrPat HsPat -- ^ irrefutable pattern (@~@)+ | HsPatTypeSig SrcLoc HsPat HsType+ -- ^ pattern type signature+ +-- HaRP+ | HsPRPat SrcLoc [HsRPat] -- ^ regular pattern (HaRP)+-- Hsx+ | HsPXTag SrcLoc HsXName [HsPXAttr] (Maybe HsPat) HsPat+ -- ^ XML tag pattern+ | HsPXETag SrcLoc HsXName [HsPXAttr] (Maybe HsPat)+ -- ^ XML singleton tag pattern+ | HsPXPcdata String+ -- ^ XML PCDATA pattern+ | HsPXPatTag HsPat+ -- ^ XML embedded pattern+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An XML attribute in an XML tag pattern +data HsPXAttr = HsPXAttr HsXName HsPat+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An entity in a regular pattern (HaRP)+data HsRPat+ = HsRPStar HsRPat+ | HsRPStarG HsRPat+ | HsRPPlus HsRPat+ | HsRPPlusG HsRPat+ | HsRPOpt HsRPat+ | HsRPOptG HsRPat+ | HsRPEither HsRPat HsRPat+ | HsRPSeq [HsRPat]+ | HsRPCAs HsName HsRPat+ | HsRPAs HsName HsRPat+ | HsRPParen HsRPat+ | HsRPPat HsPat+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An /fpat/ in a labeled record pattern.+data HsPatField+ = HsPFieldPat HsQName HsPat+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | This type represents both /stmt/ in a @do@-expression,+-- and /qual/ in a list comprehension, as well as /stmt/+-- in a pattern guard.+data HsStmt+ = HsGenerator SrcLoc HsPat HsExp+ -- ^ a generator /pat/ @<-@ /exp/+ | HsQualifier HsExp -- ^ an /exp/ by itself: in a @do@-expression,+ -- an action whose result is discarded;+ -- in a list comprehension, a guard expression+ | HsLetStmt HsBinds -- ^ local bindings+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An /fbind/ in a labeled construction or update.+data HsFieldUpdate+ = HsFieldUpdate HsQName HsExp+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An /alt/ in a @case@ expression.+data HsAlt+ = HsAlt SrcLoc HsPat HsGuardedAlts HsBinds+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++data HsGuardedAlts+ = HsUnGuardedAlt HsExp -- ^ @->@ /exp/+ | HsGuardedAlts [HsGuardedAlt] -- ^ /gdpat/+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A guarded alternative @|@ /stmt/, ... , /stmt/ @->@ /exp/.+data HsGuardedAlt+ = HsGuardedAlt SrcLoc [HsStmt] HsExp+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-----------------------------------------------------------------------------+-- Builtin names.++prelude_mod, main_mod :: Module+prelude_mod = Module "Prelude"+main_mod = Module "Main"++main_name :: HsName+main_name = HsIdent "main"++unit_con_name :: HsQName+unit_con_name = Special HsUnitCon++tuple_con_name :: Int -> HsQName+tuple_con_name i = Special (HsTupleCon (i+1))++list_cons_name :: HsQName+list_cons_name = Special HsCons++unit_con :: HsExp+unit_con = HsCon unit_con_name++tuple_con :: Int -> HsExp+tuple_con i = HsCon (tuple_con_name i)++as_name, qualified_name, hiding_name, minus_name, pling_name, dot_name, star_name :: HsName+as_name = HsIdent "as"+qualified_name = HsIdent "qualified"+hiding_name = HsIdent "hiding"+minus_name = HsSymbol "-"+pling_name = HsSymbol "!"+dot_name = HsSymbol "."+star_name = HsSymbol "*"++export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name :: HsName+export_name = HsIdent "export"+safe_name = HsIdent "safe"+unsafe_name = HsIdent "unsafe"+threadsafe_name = HsIdent "threadsafe"+stdcall_name = HsIdent "stdcall"+ccall_name = HsIdent "ccall"++unit_tycon_name, fun_tycon_name, list_tycon_name :: HsQName+unit_tycon_name = unit_con_name+fun_tycon_name = Special HsFunCon+list_tycon_name = Special HsListCon++tuple_tycon_name :: Int -> HsQName+tuple_tycon_name i = tuple_con_name i++unit_tycon, fun_tycon, list_tycon :: HsType+unit_tycon = HsTyCon unit_tycon_name+fun_tycon = HsTyCon fun_tycon_name+list_tycon = HsTyCon list_tycon_name++tuple_tycon :: Int -> HsType+tuple_tycon i = HsTyCon (tuple_tycon_name i)
− Language/Haskell/Hsx.hs
@@ -1,27 +0,0 @@-module Language.Haskell.Hsx (- module Language.Haskell.Hsx.Syntax- , module Language.Haskell.Hsx.Build- , module Language.Haskell.Hsx.Parser- , module Language.Haskell.Hsx.Pretty- , module Language.Haskell.Hsx.Transform- , parseFileContents- , parseFileContentsWithMode- , parseFile- ) where--import Language.Haskell.Hsx.Build-import Language.Haskell.Hsx.Syntax-import Language.Haskell.Hsx.Parser-import Language.Haskell.Hsx.Pretty-import Language.Haskell.Hsx.Transform--parseFile :: FilePath -> IO (ParseResult HsModule)-parseFile fp = readFile fp >>= (return . parseFileContentsWithMode (ParseMode fp))--parseFileContents :: String -> ParseResult HsModule-parseFileContents = parseFileContentsWithMode defaultParseMode--parseFileContentsWithMode :: ParseMode -> String -> ParseResult HsModule-parseFileContentsWithMode p rawStr =- let cleanStr = unlines [ s | s@(c:_) <- lines rawStr, c /= '#' ]- in parseModuleWithMode p cleanStr
− Language/Haskell/Hsx/Build.hs
@@ -1,235 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Hsx.Build--- Original : Language.Haskell.Syntax--- Copyright : (c) The GHC Team, 1997-2000,--- (c) Niklas Broberg 2004--- License : BSD-style (see the file LICENSE.txt)--- --- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se--- Stability : experimental--- Portability : portable-----------------------------------------------------------------------------------module Language.Haskell.Hsx.Build (-- -- * Syntax building functions- name, -- :: String -> HsName- sym, -- :: String -> HsName- var, -- :: HsName -> HsExp- op, -- :: HsName -> HsQOp- qvar, -- :: Module -> HsName -> HsExp- pvar, -- :: HsName -> HsPat- app, -- :: HsExp -> HsExp -> HsExp- infixApp, -- :: HsExp -> HsQOp -> HsExp -> HsExp- appFun, -- :: HsExp -> [HsExp] -> HsExp- pApp, -- :: HsName -> [HsPat] -> HsPat- tuple, -- :: [HsExp] -> HsExp- pTuple, -- :: [HsPat] -> HsPat- varTuple, -- :: [HsName] -> HsExp- pvarTuple, -- :: [HsName] -> HsPat- function, -- :: String -> HsExp- strE, -- :: String -> HsExp- charE, -- :: Char -> HsExp- intE, -- :: Integer -> HsExp- strP, -- :: String -> HsPat- charP, -- :: Char -> HsPat- intP, -- :: Integer -> HsPat- doE, -- :: [HsStmt] -> HsExp- lamE, -- :: SrcLoc -> [HsPat] -> HsExp -> HsExp- letE, -- :: [HsDecl] -> HsExp -> HsExp- caseE, -- :: HsExp -> [HsAlt] -> HsExp- alt, -- :: SrcLoc -> HsPat -> HsExp -> HsAlt- altGW, -- :: SrcLoc -> HsPat -> [HsStmt] -> HsExp -> HsBinds -> HsAlt- listE, -- :: [HsExp] -> HsExp- eList, -- :: HsExp- peList, -- :: HsPat- paren, -- :: HsExp -> HsExp- pParen, -- :: HsPat -> HsPat- qualStmt, -- :: HsExp -> HsStmt- genStmt, -- :: SrcLoc -> HsPat -> HsExp -> HsStmt- letStmt, -- :: [HsDecl] -> HsStmt- binds, -- :: [HsDecl] -> HsBinds- noBinds, -- :: HsBinds- wildcard, -- :: HsPat- genNames, -- :: String -> Int -> [HsName]- - -- * More advanced building- sfun, -- :: SrcLoc -> HsName -> [HsName] -> HsRhs -> HsBinds -> HsDecl- simpleFun, -- :: SrcLoc -> HsName -> HsName -> HsExp -> HsDecl- patBind, -- :: SrcLoc -> HsPat -> HsExp -> HsDecl- patBindWhere, -- :: SrcLoc -> HsPat -> HsExp -> [HsDecl] -> HsDecl- nameBind, -- :: SrcLoc -> HsName -> HsExp -> HsDecl- metaFunction, -- :: String -> [HsExp] -> HsExp- metaConPat -- :: String -> [HsPat] -> HsPat- ) where--import Language.Haskell.Hsx.Syntax---------------------------------------------------------------------------------- Help functions for Abstract syntax --name :: String -> HsName-name = HsIdent--sym :: String -> HsName-sym = HsSymbol--var :: HsName -> HsExp-var = HsVar . UnQual--op :: HsName -> HsQOp-op = HsQVarOp . UnQual--qvar :: Module -> HsName -> HsExp-qvar m n = HsVar $ Qual m n--pvar :: HsName -> HsPat-pvar = HsPVar--app :: HsExp -> HsExp -> HsExp-app = HsApp--infixApp :: HsExp -> HsQOp -> HsExp -> HsExp-infixApp = HsInfixApp--appFun :: HsExp -> [HsExp] -> HsExp-appFun f [] = f-appFun f (a:as) = appFun (app f a) as--pApp :: HsName -> [HsPat] -> HsPat-pApp n ps = HsPApp (UnQual n) ps--tuple :: [HsExp] -> HsExp-tuple = HsTuple--pTuple :: [HsPat] -> HsPat-pTuple = HsPTuple--varTuple :: [HsName] -> HsExp-varTuple ns = tuple $ map var ns--pvarTuple :: [HsName] -> HsPat-pvarTuple ns = pTuple $ map pvar ns--function :: String -> HsExp-function = var . HsIdent--strE :: String -> HsExp-strE = HsLit . HsString--charE :: Char -> HsExp-charE = HsLit . HsChar--intE :: Integer -> HsExp-intE = HsLit . HsInt--strP :: String -> HsPat-strP = HsPLit . HsString--charP :: Char -> HsPat-charP = HsPLit . HsChar--intP :: Integer -> HsPat-intP = HsPLit . HsInt--doE :: [HsStmt] -> HsExp-doE = HsDo--lamE :: SrcLoc -> [HsPat] -> HsExp -> HsExp-lamE = HsLambda--letE :: [HsDecl] -> HsExp -> HsExp-letE ds e = HsLet (binds ds) e--caseE :: HsExp -> [HsAlt] -> HsExp-caseE = HsCase--alt :: SrcLoc -> HsPat -> HsExp -> HsAlt-alt s p e = HsAlt s p (HsUnGuardedAlt e) noBinds--altGW :: SrcLoc -> HsPat -> [HsStmt] -> HsExp -> HsBinds -> HsAlt-altGW s p gs e w = HsAlt s p (gAlt s gs e) w--unGAlt :: HsExp -> HsGuardedAlts-unGAlt = HsUnGuardedAlt--gAlts :: SrcLoc -> [([HsStmt],HsExp)] -> HsGuardedAlts-gAlts s as = HsGuardedAlts $ map (\(gs,e) -> HsGuardedAlt s gs e) as--gAlt :: SrcLoc -> [HsStmt] -> HsExp -> HsGuardedAlts-gAlt s gs e = gAlts s [(gs,e)]--listE :: [HsExp] -> HsExp-listE = HsList--eList :: HsExp-eList = HsList []--peList :: HsPat-peList = HsPList []--paren :: HsExp -> HsExp-paren = HsParen--pParen :: HsPat -> HsPat-pParen = HsPParen--qualStmt :: HsExp -> HsStmt-qualStmt = HsQualifier--genStmt :: SrcLoc -> HsPat -> HsExp -> HsStmt-genStmt = HsGenerator--letStmt :: [HsDecl] -> HsStmt-letStmt ds = HsLetStmt $ binds ds--binds :: [HsDecl] -> HsBinds-binds = HsBDecls--noBinds :: HsBinds-noBinds = binds []--wildcard :: HsPat-wildcard = HsPWildCard--genNames :: String -> Int -> [HsName]-genNames s k = [ HsIdent $ s ++ show i | i <- [1..k] ]------------------------------------------------------------------------------------ Some more specialised help functions ---- | A function with a single "match"-sfun :: SrcLoc -> HsName -> [HsName] -> HsRhs -> HsBinds -> HsDecl-sfun s f pvs rhs bs = HsFunBind [HsMatch s f (map pvar pvs) rhs bs]---- | A function with a single "match", a single argument, no guards--- and no where declarations-simpleFun :: SrcLoc -> HsName -> HsName -> HsExp -> HsDecl-simpleFun s f a e = let rhs = HsUnGuardedRhs e- in sfun s f [a] rhs noBinds---- | A pattern bind where the pattern is a variable, and where--- there are no guards and no 'where' clause.-patBind :: SrcLoc -> HsPat -> HsExp -> HsDecl-patBind s p e = let rhs = HsUnGuardedRhs e- in HsPatBind s p rhs noBinds--patBindWhere :: SrcLoc -> HsPat -> HsExp -> [HsDecl] -> HsDecl-patBindWhere s p e ds = let rhs = HsUnGuardedRhs e- in HsPatBind s p rhs (binds ds)--nameBind :: SrcLoc -> HsName -> HsExp -> HsDecl-nameBind s n e = patBind s (pvar n) e---- meta-level functions, i.e. functions that represent functions, --- and that take arguments representing arguments... whew!-metaFunction :: String -> [HsExp] -> HsExp-metaFunction s es = mf s (reverse es)- where mf s [] = var $ name s- mf s (e:es) = app (mf s es) e---metaConPat :: String -> [HsPat] -> HsPat-metaConPat s ps = pApp (name s) ps
− Language/Haskell/Hsx/Lexer.hs
@@ -1,808 +0,0 @@--- #hide--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Hsx.Lexer--- Original : Language.Haskell.Lexer--- Copyright : (c) The GHC Team, 1997-2000--- (c) Niklas Broberg, 2004--- License : BSD-style (see the file LICENSE.txt)--- --- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se--- Stability : experimental--- Portability : portable------ Lexer for Haskell, with some extensions.------------------------------------------------------------------------------------- ToDo: Introduce different tokens for decimal, octal and hexadecimal (?)--- ToDo: FloatTok should have three parts (integer part, fraction, exponent) (?)--- ToDo: Use a lexical analyser generator (lx?)--module Language.Haskell.Hsx.Lexer (Token(..), lexer) where--import Language.Haskell.Hsx.ParseMonad--import Data.Char-import Data.Ratio--data Token- = VarId String- | QVarId (String,String)- | IDupVarId (String) -- duplicable implicit parameter- | ILinVarId (String) -- linear implicit parameter- | ConId String- | QConId (String,String)- | DVarId [String] -- to enable varid's with '-' in them- | VarSym String- | ConSym String- | QVarSym (String,String)- | QConSym (String,String)- | IntTok Integer- | FloatTok Rational- | Character Char- | StringTok String---- Symbols-- | LeftParen- | RightParen- | LeftHashParen- | RightHashParen- | SemiColon- | LeftCurly- | RightCurly- | VRightCurly -- a virtual close brace- | LeftSquare- | RightSquare- | Comma- | Underscore- | BackQuote---- Reserved operators-- | Dot -- reserved for use with 'forall x . x'- | DotDot- | Colon- | DoubleColon- | Equals- | Backslash- | Bar- | LeftArrow- | RightArrow- | At- | Tilde- | DoubleArrow- | Minus- | Exclamation- --- Template Haskell- | THExpQuote -- [| or [e|- | THPatQuote -- [p|- | THDecQuote -- [d|- | THTypQuote -- [t| - | THCloseQuote -- |]- | THIdEscape (String) -- $x- | THParenEscape -- $( - | THReifyType- | THReifyDecl- | THReifyFixity---- HaRP- | RPOpen -- [/- | RPClose -- /]- | RPSeqOpen -- (/- | RPSeqClose -- /)- | RPStar -- *- | RPStarG -- *!- | RPOpt -- ?- | RPOptG -- ?!- | RPPlus -- +- | RPPlusG -- +!- | RPEither -- |- | RPCAt -- @:---- Hsx- | XCodeTagOpen -- <%- | XCodeTagClose -- %>- | XStdTagOpen -- <- | XStdTagClose -- >- | XCloseTagOpen -- </- | XEmptyTagClose -- />- | XPcdata String---- Reserved Ids-- | KW_As- | KW_Case- | KW_Class- | KW_Data- | KW_Default- | KW_Deriving- | KW_DLet -- implictit parameter binding- | KW_Do- | KW_MDo- | KW_Else- | KW_Forall -- universal/existential types- | KW_Hiding- | KW_If- | KW_Import- | KW_In- | KW_Infix- | KW_InfixL- | KW_InfixR- | KW_Instance- | KW_Let- | KW_Module- | KW_NewType- | KW_Of- | KW_Then- | KW_Type- | KW_Where- | KW_With -- implicit parameter binding- | KW_Qualified-- -- FFI- | KW_Foreign- | KW_Export- | KW_Safe- | KW_Unsafe- | KW_Threadsafe- | KW_StdCall- | KW_CCall-- | EOF- deriving (Eq,Show)--reserved_ops :: [(String,Token)]-reserved_ops = [- ( ".", Dot ),- ( "..", DotDot ),- ( ":", Colon ),- ( "::", DoubleColon ),- ( "=", Equals ),- ( "\\", Backslash ),- ( "|", Bar ),- ( "<-", LeftArrow ),- ( "->", RightArrow ),- ( "@", At ),- ( "~", Tilde ),- ( "=>", DoubleArrow )- ]--special_varops :: [(String,Token)]-special_varops = [- ( "-", Minus ), --ToDo: shouldn't be here- ( "!", Exclamation ) --ditto- ]--reserved_ids :: [(String,Token)]-reserved_ids = [- ( "_", Underscore ),- ( "case", KW_Case ),- ( "class", KW_Class ),- ( "data", KW_Data ),- ( "default", KW_Default ),- ( "deriving", KW_Deriving ),- ( "dlet", KW_DLet ), -- implicit parameters (hugs)- ( "do", KW_Do ),- ( "else", KW_Else ),- ( "forall", KW_Forall ), -- universal/existential quantification- ( "if", KW_If ),- ( "import", KW_Import ),- ( "in", KW_In ),- ( "infix", KW_Infix ),- ( "infixl", KW_InfixL ),- ( "infixr", KW_InfixR ),- ( "instance", KW_Instance ),- ( "let", KW_Let ),- ( "mdo", KW_MDo ),- ( "module", KW_Module ),- ( "newtype", KW_NewType ),- ( "of", KW_Of ),- ( "then", KW_Then ),- ( "type", KW_Type ),- ( "where", KW_Where ),- ( "with", KW_With ), -- implicit parameters---- Template Haskell- ( "reifyDecl", THReifyDecl ),- ( "reifyType", THReifyType ),- ( "reifyFixity", THReifyFixity ),---- FFI- ( "foreign", KW_Foreign )- ]---special_varids :: [(String,Token)]-special_varids = [- ( "as", KW_As ),- ( "qualified", KW_Qualified ),- ( "hiding", KW_Hiding ),---- FFI- ( "export", KW_Export),- ( "safe", KW_Safe),- ( "unsafe", KW_Unsafe),- ( "threadsafe", KW_Threadsafe),- ( "stdcall", KW_StdCall),- ( "ccall", KW_CCall)- ]--isIdent, isHSymbol :: Char -> Bool-isIdent c = isAlpha c || isDigit c || c == '\'' || c == '_'-isHSymbol c = elem c ":!#$%&*+./<=>?@\\^|-~"--matchChar :: Char -> String -> Lex a ()-matchChar c msg = do- s <- getInput- if null s || head s /= c then fail msg else discard 1---- The top-level lexer.--- We need to know whether we are at the beginning of the line to decide--- whether to insert layout tokens.--lexer :: (Token -> P a) -> P a-lexer = runL $ do- bol <- checkBOL- (bol, ws) <- lexWhiteSpace bol- -- take care of whitespace in PCDATA- ec <- getExtContext- case ec of- -- if there was no linebreak, and we are lexing PCDATA,- -- then we want to care about the whitespace- Just ChildCtxt | not bol && ws -> return $ XPcdata " "- _ -> do startToken- if bol then lexBOL else lexToken --lexWhiteSpace :: Bool -> Lex a (Bool, Bool)-lexWhiteSpace bol = do- s <- getInput- case s of- '{':'-':_ -> do- discard 2- bol <- lexNestedComment bol- (bol, _) <- lexWhiteSpace bol- return (bol, True)- '-':'-':s | all (== '-') (takeWhile isHSymbol s) -> do- lexWhile (== '-')- lexWhile (/= '\n')- lexNewline- lexWhiteSpace True- return (True, True)- '\n':_ -> do- lexNewline- lexWhiteSpace True- return (True, True)- '\t':_ -> do- lexTab- (bol, _) <- lexWhiteSpace bol- return (bol, True) - c:_ | isSpace c -> do- discard 1- (bol, _) <- lexWhiteSpace bol- return (bol, True)- _ -> return (bol, False)--lexNestedComment :: Bool -> Lex a Bool-lexNestedComment bol = do- s <- getInput- case s of- '-':'}':_ -> discard 2 >> return bol- '{':'-':_ -> do- discard 2- bol <- lexNestedComment bol -- rest of the subcomment- lexNestedComment bol -- rest of this comment- '\t':_ -> lexTab >> lexNestedComment bol- '\n':_ -> lexNewline >> lexNestedComment True- _:_ -> discard 1 >> lexNestedComment bol- [] -> fail "Unterminated nested comment"---- When we are lexing the first token of a line, check whether we need to--- insert virtual semicolons or close braces due to layout.--lexBOL :: Lex a Token-lexBOL = do- pos <- getOffside- case pos of- LT -> do- -- trace "layout: inserting '}'\n" $- -- Set col to 0, indicating that we're still at the- -- beginning of the line, in case we need a semi-colon too.- -- Also pop the context here, so that we don't insert- -- another close brace before the parser can pop it.- setBOL- popContextL "lexBOL"- return VRightCurly- EQ ->- -- trace "layout: inserting ';'\n" $- return SemiColon- GT ->- lexToken--lexToken :: Lex a Token-lexToken = do- ec <- getExtContext- case ec of- Just HarpCtxt -> lexHarpToken- Just TagCtxt -> lexTagCtxt- Just CloseTagCtxt -> lexCloseTagCtxt- Just ChildCtxt -> lexChildCtxt- Just CodeTagCtxt -> lexCodeTagCtxt- _ -> lexStdToken---lexChildCtxt :: Lex a Token-lexChildCtxt = do- s <- getInput- case s of- '<':'%':_ -> do discard 2- pushExtContextL CodeTagCtxt- return XCodeTagOpen- '<':'/':_ -> do discard 2- popExtContextL "lexChildCtxt"- pushExtContextL CloseTagCtxt- return XCloseTagOpen- '<':_ -> do discard 1- pushExtContextL TagCtxt- return XStdTagOpen- '[':'/':_ -> do discard 2- pushExtContextL HarpCtxt- return RPOpen- _ -> lexPCDATA---lexPCDATA :: Lex a Token-lexPCDATA = do- s <- getInput- case s of- [] -> return EOF- _ -> case s of- '\n':_ -> do- x <- lexNewline >> lexPCDATA- case x of- XPcdata p -> return $ XPcdata $ '\n':p- EOF -> return EOF- '<':_ -> return $ XPcdata ""- '[':'/':_ -> return $ XPcdata ""- '[':s' -> do discard 1- pcd <- lexPCDATA- case pcd of- XPcdata pcd' -> return $ XPcdata $ '[':pcd'- EOF -> return EOF- _ -> do let pcd = takeWhile (\c -> not $ elem c "<[\n") s- l = length pcd- discard l- x <- lexPCDATA- case x of- XPcdata pcd' -> return $ XPcdata $ pcd ++ pcd'- EOF -> return EOF---lexCodeTagCtxt :: Lex a Token-lexCodeTagCtxt = do- s <- getInput- case s of- '%':'>':_ -> do discard 2- popExtContextL "lexCodeTagContext"- return XCodeTagClose- _ -> lexStdToken--lexCloseTagCtxt :: Lex a Token-lexCloseTagCtxt = do- s <- getInput- case s of- '>':_ -> do discard 1- popExtContextL "lexCloseTagCtxt"- return XStdTagClose- _ -> lexStdToken--lexTagCtxt :: Lex a Token-lexTagCtxt = do- s <- getInput- case s of- '/':'>':_ -> do discard 2- popExtContextL "lexTagCtxt: Empty tag"- return XEmptyTagClose- '>':_ -> do discard 1- popExtContextL "lexTagCtxt: Standard tag"- pushExtContextL ChildCtxt- return XStdTagClose- _ -> lexStdToken--lexHarpToken :: Lex a Token-lexHarpToken = do- s <- getInput- case s of- '[':'/':_ -> do discard 2- pushExtContextL HarpCtxt- return RPOpen- '/':']':_ -> do discard 2- popExtContextL "lexHarpToken"- return RPClose- '(':'/':_ -> do discard 2- return RPSeqOpen- '/':')':_ -> do discard 2- return RPSeqClose- '*':'!':_ -> do discard 2- return RPStarG- '*':_ -> do discard 1- return RPStar- '+':'!':_ -> do discard 2- return RPPlusG- '+':_ -> do discard 1- return RPPlus- '|':_ -> do discard 1- return RPEither- '?':'!':_ -> do discard 2- return RPOptG- '?':_ -> do discard 1- return RPOpt- '@':':':_ -> do discard 2- return RPCAt- _ -> lexStdToken--lexStdToken :: Lex a Token-lexStdToken = do- s <- getInput- case s of- [] -> return EOF-- '0':c:d:_ | toLower c == 'o' && isOctDigit d -> do- discard 2- n <- lexOctal- return (IntTok n)- | toLower c == 'x' && isHexDigit d -> do- discard 2- n <- lexHexadecimal- return (IntTok n)- - -- implicit parameters- '?':c:_ | isLower c -> do- discard 1- id <- lexWhile isIdent- return $ IDupVarId id-- '%':c:_ | isLower c -> do- discard 1- id <- lexWhile isIdent- return $ ILinVarId id- -- end implicit parameters-- -- harp- '[':'/':_ -> do- discard 2- pushExtContextL HarpCtxt- return RPOpen - - -- template haskell- '[':'|':_ -> do- discard 2- return $ THExpQuote- - '[':c:'|':_ | c == 'e' -> do- discard 3- return $ THExpQuote- | c == 'p' -> do- discard 3- return THPatQuote- | c == 'd' -> do- discard 3- return THDecQuote- | c == 't' -> do- discard 3- return THTypQuote- - '|':']':_ -> do discard 2- return THCloseQuote- - '$':c:_ | isLower c -> do- discard 1- id <- lexWhile isIdent- return $ THIdEscape id- | c == '(' -> do- discard 2- return THParenEscape- -- end template haskell- - -- hsx- '<':'%':_ -> do discard 2- pushExtContextL CodeTagCtxt- return XCodeTagOpen- '<':c:_ | isAlpha c -> do discard 1- pushExtContextL TagCtxt- return XStdTagOpen- -- end hsx- - '(':'#':_ -> do discard 2 >> return LeftHashParen- - '#':')':_ -> do discard 2 >> return RightHashParen- - c:_ | isDigit c -> lexDecimalOrFloat-- | isUpper c -> lexConIdOrQual ""-- | isLower c || c == '_' -> do- idents <- lexIdents- case idents of- [ident] -> return $ case lookup ident (reserved_ids ++ special_varids) of- Just keyword -> keyword- Nothing -> VarId ident- _ -> return $ DVarId idents-- | isHSymbol c -> do- sym <- lexWhile isHSymbol- return $ case lookup sym (reserved_ops ++ special_varops) of- Just t -> t- Nothing -> case c of- ':' -> ConSym sym- _ -> VarSym sym-- | otherwise -> do- discard 1- case c of-- -- First the special symbols- '(' -> return LeftParen- ')' -> return RightParen- ',' -> return Comma- ';' -> return SemiColon- '[' -> return LeftSquare- ']' -> return RightSquare- '`' -> return BackQuote- '{' -> do- pushContextL NoLayout- return LeftCurly- '}' -> do- popContextL "lexStdToken"- return RightCurly-- '\'' -> do- c2 <- lexChar- matchChar '\'' "Improperly terminated character constant"- return (Character c2)-- '"' -> lexString-- _ -> fail ("Illegal character \'" ++ show c ++ "\'\n")-- where lexIdents :: Lex a [String]- lexIdents = do- ident <- lexWhile isIdent- s <- getInput- case s of- '-':c:_ | isIdent c -> do - discard 1- idents <- lexIdents- return $ ident : idents- _ -> return [ident]----lexDecimalOrFloat :: Lex a Token-lexDecimalOrFloat = do- ds <- lexWhile isDigit- rest <- getInput- case rest of- ('.':d:_) | isDigit d -> do- discard 1- frac <- lexWhile isDigit- let num = parseInteger 10 (ds ++ frac)- decimals = toInteger (length frac)- exponent <- do- rest2 <- getInput- case rest2 of- 'e':_ -> lexExponent- 'E':_ -> lexExponent- _ -> return 0- return (FloatTok ((num%1) * 10^^(exponent - decimals)))- e:_ | toLower e == 'e' -> do- exponent <- lexExponent- return (FloatTok ((parseInteger 10 ds%1) * 10^^exponent))- _ -> return (IntTok (parseInteger 10 ds))-- where- lexExponent :: Lex a Integer- lexExponent = do- discard 1 -- 'e' or 'E'- r <- getInput- case r of- '+':d:_ | isDigit d -> do- discard 1- lexDecimal- '-':d:_ | isDigit d -> do- discard 1- n <- lexDecimal- return (negate n)- d:_ | isDigit d -> lexDecimal- _ -> fail "Float with missing exponent"--lexConIdOrQual :: String -> Lex a Token-lexConIdOrQual qual = do- con <- lexWhile isIdent- let conid | null qual = ConId con- | otherwise = QConId (qual,con)- qual' | null qual = con- | otherwise = qual ++ '.':con- just_a_conid <- alternative (return conid)- rest <- getInput- case rest of- '.':c:_- | isLower c || c == '_' -> do -- qualified varid?- discard 1- ident <- lexWhile isIdent- case lookup ident reserved_ids of- -- cannot qualify a reserved word- Just _ -> just_a_conid- Nothing -> return (QVarId (qual', ident))-- | isUpper c -> do -- qualified conid?- discard 1- lexConIdOrQual qual'-- | isHSymbol c -> do -- qualified symbol?- discard 1- sym <- lexWhile isHSymbol- case lookup sym reserved_ops of- -- cannot qualify a reserved operator- Just _ -> just_a_conid- Nothing -> return $ case c of- ':' -> QConSym (qual', sym)- _ -> QVarSym (qual', sym)-- _ -> return conid -- not a qualified thing--lexChar :: Lex a Char-lexChar = do- r <- getInput- case r of- '\\':_ -> lexEscape- c:_ -> discard 1 >> return c- [] -> fail "Incomplete character constant"--lexString :: Lex a Token-lexString = loop ""- where- loop s = do- r <- getInput- case r of- '\\':'&':_ -> do- discard 2- loop s- '\\':c:_ | isSpace c -> do- discard 1- lexWhiteChars- matchChar '\\' "Illegal character in string gap"- loop s- | otherwise -> do- ce <- lexEscape- loop (ce:s)- '"':_ -> do- discard 1- return (StringTok (reverse s))- c:_ -> do- discard 1- loop (c:s)- [] -> fail "Improperly terminated string"-- lexWhiteChars :: Lex a ()- lexWhiteChars = do- s <- getInput- case s of- '\n':_ -> do- lexNewline- lexWhiteChars- '\t':_ -> do- lexTab- lexWhiteChars- c:_ | isSpace c -> do- discard 1- lexWhiteChars- _ -> return ()--lexEscape :: Lex a Char-lexEscape = do- discard 1- r <- getInput- case r of---- Production charesc from section B.2 (Note: \& is handled by caller)-- 'a':_ -> discard 1 >> return '\a'- 'b':_ -> discard 1 >> return '\b'- 'f':_ -> discard 1 >> return '\f'- 'n':_ -> discard 1 >> return '\n'- 'r':_ -> discard 1 >> return '\r'- 't':_ -> discard 1 >> return '\t'- 'v':_ -> discard 1 >> return '\v'- '\\':_ -> discard 1 >> return '\\'- '"':_ -> discard 1 >> return '\"'- '\'':_ -> discard 1 >> return '\''---- Production ascii from section B.2-- '^':c:_ -> discard 2 >> cntrl c- 'N':'U':'L':_ -> discard 3 >> return '\NUL'- 'S':'O':'H':_ -> discard 3 >> return '\SOH'- 'S':'T':'X':_ -> discard 3 >> return '\STX'- 'E':'T':'X':_ -> discard 3 >> return '\ETX'- 'E':'O':'T':_ -> discard 3 >> return '\EOT'- 'E':'N':'Q':_ -> discard 3 >> return '\ENQ'- 'A':'C':'K':_ -> discard 3 >> return '\ACK'- 'B':'E':'L':_ -> discard 3 >> return '\BEL'- 'B':'S':_ -> discard 2 >> return '\BS'- 'H':'T':_ -> discard 2 >> return '\HT'- 'L':'F':_ -> discard 2 >> return '\LF'- 'V':'T':_ -> discard 2 >> return '\VT'- 'F':'F':_ -> discard 2 >> return '\FF'- 'C':'R':_ -> discard 2 >> return '\CR'- 'S':'O':_ -> discard 2 >> return '\SO'- 'S':'I':_ -> discard 2 >> return '\SI'- 'D':'L':'E':_ -> discard 3 >> return '\DLE'- 'D':'C':'1':_ -> discard 3 >> return '\DC1'- 'D':'C':'2':_ -> discard 3 >> return '\DC2'- 'D':'C':'3':_ -> discard 3 >> return '\DC3'- 'D':'C':'4':_ -> discard 3 >> return '\DC4'- 'N':'A':'K':_ -> discard 3 >> return '\NAK'- 'S':'Y':'N':_ -> discard 3 >> return '\SYN'- 'E':'T':'B':_ -> discard 3 >> return '\ETB'- 'C':'A':'N':_ -> discard 3 >> return '\CAN'- 'E':'M':_ -> discard 2 >> return '\EM'- 'S':'U':'B':_ -> discard 3 >> return '\SUB'- 'E':'S':'C':_ -> discard 3 >> return '\ESC'- 'F':'S':_ -> discard 2 >> return '\FS'- 'G':'S':_ -> discard 2 >> return '\GS'- 'R':'S':_ -> discard 2 >> return '\RS'- 'U':'S':_ -> discard 2 >> return '\US'- 'S':'P':_ -> discard 2 >> return '\SP'- 'D':'E':'L':_ -> discard 3 >> return '\DEL'---- Escaped numbers-- 'o':c:_ | isOctDigit c -> do- discard 1- n <- lexOctal- checkChar n- 'x':c:_ | isHexDigit c -> do- discard 1- n <- lexHexadecimal- checkChar n- c:_ | isDigit c -> do- n <- lexDecimal- checkChar n-- _ -> fail "Illegal escape sequence"-- where- checkChar n | n <= 0x01FFFF = return (chr (fromInteger n))- checkChar _ = fail "Character constant out of range"---- Production cntrl from section B.2-- cntrl :: Char -> Lex a Char- cntrl c | c >= '@' && c <= '_' = return (chr (ord c - ord '@'))- cntrl _ = fail "Illegal control character"---- assumes at least one octal digit-lexOctal :: Lex a Integer-lexOctal = do- ds <- lexWhile isOctDigit- return (parseInteger 8 ds)---- assumes at least one hexadecimal digit-lexHexadecimal :: Lex a Integer-lexHexadecimal = do- ds <- lexWhile isHexDigit- return (parseInteger 16 ds)---- assumes at least one decimal digit-lexDecimal :: Lex a Integer-lexDecimal = do- ds <- lexWhile isDigit- return (parseInteger 10 ds)---- Stolen from Hugs's Prelude-parseInteger :: Integer -> String -> Integer-parseInteger radix ds =- foldl1 (\n d -> n * radix + d) (map (toInteger . digitToInt) ds)
− Language/Haskell/Hsx/ParseMonad.hs
@@ -1,292 +0,0 @@--- #hide--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Hsx.ParseMonad--- Original : Language.Haskell.ParseMonad--- Copyright : (c) The GHC Team, 1997-2000--- License : BSD-style (see the file libraries/base/LICENSE)--- --- Maintainer : libraries@haskell.org--- Stability : experimental--- Portability : portable------ Monads for the Haskell parser and lexer.-----------------------------------------------------------------------------------module Language.Haskell.Hsx.ParseMonad(- -- * Parsing- P, ParseResult(..), atSrcLoc, LexContext(..),- ParseMode(..), defaultParseMode,- runParserWithMode, runParser,- getSrcLoc, pushCurrentContext, popContext,- -- * Lexing- Lex(runL), getInput, discard, lexNewline, lexTab, lexWhile,- alternative, checkBOL, setBOL, startToken, getOffside,- pushContextL, popContextL,- -- * Harp/Hsx- ExtContext(..),- pushExtContextL, popExtContextL, getExtContext,- getModuleName- ) where--import Language.Haskell.Hsx.Syntax(SrcLoc(..))--import Data.List ( intersperse )---- | The result of a parse.-data ParseResult a- = ParseOk a -- ^ The parse succeeded, yielding a value.- | ParseFailed SrcLoc String- -- ^ The parse failed at the specified- -- source location, with an error message.- deriving Show---- internal version-data ParseStatus a = Ok ParseState a | Failed SrcLoc String- deriving Show--data LexContext = NoLayout | Layout Int- deriving (Eq,Ord,Show)- -data ExtContext = CodeCtxt | HarpCtxt | TagCtxt | ChildCtxt - | CloseTagCtxt | CodeTagCtxt- deriving (Eq,Ord,Show)--type ParseState = ([LexContext],[ExtContext])--indentOfParseState :: ParseState -> Int-indentOfParseState (Layout n:_,_) = n-indentOfParseState _ = 0---- | Static parameters governing a parse.--- More to come later, e.g. literate mode, language extensions.--data ParseMode = ParseMode {- -- | original name of the file being parsed- parseFilename :: String- }---- | Default parameters for a parse,--- currently just a marker for an unknown filename.--defaultParseMode :: ParseMode-defaultParseMode = ParseMode {- parseFilename = "<unknown>.hs"- }---- | Monad for parsing--newtype P a = P { runP ::- String -- input string- -> Int -- current column- -> Int -- current line- -> SrcLoc -- location of last token read- -> ParseState -- layout info.- -> ParseMode -- parse parameters- -> ParseStatus a- }--runParserWithMode :: ParseMode -> P a -> String -> ParseResult a-runParserWithMode mode (P m) s = case m s 0 1 start ([],[]) mode of- Ok _ a -> ParseOk a- Failed loc msg -> ParseFailed loc msg- where start = SrcLoc {- srcFilename = parseFilename mode,- srcLine = 1,- srcColumn = 1- }--runParser :: P a -> String -> ParseResult a-runParser = runParserWithMode defaultParseMode--instance Monad P where- return a = P $ \_i _x _y _l s _m -> Ok s a- P m >>= k = P $ \i x y l s mode ->- case m i x y l s mode of- Failed loc msg -> Failed loc msg- Ok s' a -> runP (k a) i x y l s' mode- fail s = P $ \_r _col _line loc _stk _m -> Failed loc s--atSrcLoc :: P a -> SrcLoc -> P a-P m `atSrcLoc` loc = P $ \i x y _l -> m i x y loc--getSrcLoc :: P SrcLoc-getSrcLoc = P $ \_i _x _y l s _m -> Ok s l--getModuleName :: P String-getModuleName = P $ \_i _x _y _l s m -> - let fn = parseFilename m- mn = concat $ intersperse "." $ splitPath fn- - splitPath :: String -> [String]- splitPath "" = []- splitPath str = let (l,str') = break ('\\'==) str- in case str' of - [] -> [removeSuffix l]- (_:str'') -> l : splitPath str''- - removeSuffix l = reverse $ tail $ dropWhile ('.'/=) $ reverse l-- in Ok s mn---- Enter a new layout context. If we are already in a layout context,--- ensure that the new indent is greater than the indent of that context.--- (So if the source loc is not to the right of the current indent, an--- empty list {} will be inserted.)--pushCurrentContext :: P ()-pushCurrentContext = do- loc <- getSrcLoc- indent <- currentIndent- pushContext (Layout (srcColumn loc))--currentIndent :: P Int-currentIndent = P $ \_r _x _y loc stk _mode -> Ok stk (indentOfParseState stk)--pushContext :: LexContext -> P ()-pushContext ctxt =---trace ("pushing lexical scope: " ++ show ctxt ++"\n") $- P $ \_i _x _y _l (s, e) _m -> Ok (ctxt:s, e) ()--popContext :: P ()-popContext = P $ \_i _x _y _l stk _m ->- case stk of- (_:s, e) -> --trace ("popping lexical scope, context now "++show s ++ "\n") $- Ok (s, e) ()- ([],_) -> error "Internal error: empty context in popContext"----- HaRP/Hsx-pushExtContext :: ExtContext -> P ()-pushExtContext ctxt = P $ \_i _x _y _l (s, e) _m -> Ok (s, ctxt:e) ()--popExtContext :: P ()-popExtContext = P $ \_i _x _y _l (s, e) _m ->- case e of- (_:e') -> - Ok (s, e') ()- [] -> error "Internal error: empty context in popExtContext"----- Monad for lexical analysis:--- a continuation-passing version of the parsing monad--newtype Lex r a = Lex { runL :: (a -> P r) -> P r }--instance Monad (Lex r) where- return a = Lex $ \k -> k a- Lex v >>= f = Lex $ \k -> v (\a -> runL (f a) k)- Lex v >> Lex w = Lex $ \k -> v (\_ -> w k)- fail s = Lex $ \_ -> fail s---- Operations on this monad--getInput :: Lex r String-getInput = Lex $ \cont -> P $ \r -> runP (cont r) r---- | Discard some input characters (these must not include tabs or newlines).--discard :: Int -> Lex r ()-discard n = Lex $ \cont -> P $ \r x -> runP (cont ()) (drop n r) (x+n)---- | Discard the next character, which must be a newline.--lexNewline :: Lex a ()-lexNewline = Lex $ \cont -> P $ \(_:r) _x y -> runP (cont ()) r 1 (y+1)---- | Discard the next character, which must be a tab.--lexTab :: Lex a ()-lexTab = Lex $ \cont -> P $ \(_:r) x -> runP (cont ()) r (nextTab x)--nextTab :: Int -> Int-nextTab x = x + (tAB_LENGTH - (x-1) `mod` tAB_LENGTH)--tAB_LENGTH :: Int-tAB_LENGTH = 8 :: Int---- Consume and return the largest string of characters satisfying p--lexWhile :: (Char -> Bool) -> Lex a String-lexWhile p = Lex $ \cont -> P $ \r x ->- let (cs,rest) = span p r in- runP (cont cs) rest (x + length cs)---- An alternative scan, to which we can return if subsequent scanning--- is unsuccessful.--alternative :: Lex a v -> Lex a (Lex a v)-alternative (Lex v) = Lex $ \cont -> P $ \r x y ->- runP (cont (Lex $ \cont' -> P $ \_r _x _y ->- runP (v cont') r x y)) r x y---- The source location is the coordinates of the previous token,--- or, while scanning a token, the start of the current token.---- col is the current column in the source file.--- We also need to remember between scanning tokens whether we are--- somewhere at the beginning of the line before the first token.--- This could be done with an extra Bool argument to the P monad,--- but as a hack we use a col value of 0 to indicate this situation.---- Setting col to 0 is used in two places: just after emitting a virtual--- close brace due to layout, so that next time through we check whether--- we also need to emit a semi-colon, and at the beginning of the file,--- by runParser, to kick off the lexer.--- Thus when col is zero, the true column can be taken from the loc.--checkBOL :: Lex a Bool-checkBOL = Lex $ \cont -> P $ \r x y loc ->- if x == 0 then runP (cont True) r (srcColumn loc) y loc- else runP (cont False) r x y loc--setBOL :: Lex a ()-setBOL = Lex $ \cont -> P $ \r _ -> runP (cont ()) r 0---- Set the loc to the current position--startToken :: Lex a ()-startToken = Lex $ \cont -> P $ \s x y _ stk mode ->- let loc = SrcLoc {- srcFilename = parseFilename mode,- srcLine = y,- srcColumn = x- } in- runP (cont ()) s x y loc stk mode---- Current status with respect to the offside (layout) rule:--- LT: we are to the left of the current indent (if any)--- EQ: we are at the current indent (if any)--- GT: we are to the right of the current indent, or not subject to layout--getOffside :: Lex a Ordering-getOffside = Lex $ \cont -> P $ \r x y loc stk ->- runP (cont (compare x (indentOfParseState stk))) r x y loc stk--pushContextL :: LexContext -> Lex a ()-pushContextL ctxt = Lex $ \cont -> P $ \r x y loc (stk, e) ->- runP (cont ()) r x y loc (ctxt:stk, e)--popContextL :: String -> Lex a ()-popContextL fn = Lex $ \cont -> P $ \r x y loc stk -> case stk of- (_:ctxt, e) -> runP (cont ()) r x y loc (ctxt, e)- ([], _) -> error ("Internal error: empty context in " ++ fn)---- Harp/Hsx--getExtContext :: Lex a (Maybe ExtContext)-getExtContext = Lex $ \cont -> P $ \r x y loc stk@(_, e) ->- let me = case e of- [] -> Nothing- (c:_) -> Just c- in runP (cont me) r x y loc stk--pushExtContextL :: ExtContext -> Lex a ()-pushExtContextL ec = Lex $ \cont -> P $ \r x y loc (s, e) ->- runP (cont ()) r x y loc (s, ec:e)--popExtContextL :: String -> Lex a ()-popExtContextL fn = Lex $ \cont -> P $ \r x y loc stk@(s,e) -> case e of- (_:ec) -> runP (cont ()) r x y loc (s,ec)- [] -> error ("Internal error: empty tag context in " ++ fn)
− Language/Haskell/Hsx/ParseUtils.hs
@@ -1,542 +0,0 @@--- #hide--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Hsx.ParseUtils--- Original : Language.Haskell.ParseUtils--- Copyright : (c) Niklas Broberg 2004,--- (c) The GHC Team, 1997-2000--- License : BSD-style (see the file LICENSE.txt)--- --- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se--- Stability : experimental--- Portability : portable------ Utilities for the Haskell-exts parser.-----------------------------------------------------------------------------------module Language.Haskell.Hsx.ParseUtils (- splitTyConApp -- HsType -> P (HsName,[HsType])- , mkRecConstrOrUpdate -- HsExp -> [HsFieldUpdate] -> P HsExp- , checkPrec -- Integer -> P Int- , checkContext -- HsType -> P HsContext- , checkAssertion -- HsType -> P HsAsst- , checkDataHeader -- HsType -> P (HsContext,HsName,[HsName])- , checkClassHeader -- HsType -> P (HsContext,HsName,[HsName])- , checkInstHeader -- HsType -> P (HsContext,HsQName,[HsType])- , checkPattern -- HsExp -> P HsPat- , checkExpr -- HsExp -> P HsExp- , checkValDef -- SrcLoc -> HsExp -> HsRhs -> [HsDecl] -> P HsDecl- , checkClassBody -- [HsDecl] -> P [HsDecl]- , checkUnQual -- HsQName -> P HsName- , checkRevDecls -- [HsDecl] -> P [HsDecl]- , getGConName -- HsExp -> P HsQName- , mkHsTyForall -- Maybe [HsName] -> HsContext -> HsType -> HsType - -- HaRP- , checkRPattern -- HsExp -> P HsRPat- -- Hsx- , checkEqNames -- HsXName -> HsXName -> P HsXName- , mkPageModule -- HsExp -> P HsModule- , mkPage -- HsModule -> SrcLoc -> HsExp -> P HsModule- , mkDVar -- [String] -> String- , mkDVarExpr -- [String] -> HsExp- ) where--import Language.Haskell.Hsx.Syntax-import Language.Haskell.Hsx.ParseMonad-import Language.Haskell.Hsx.Pretty-import Language.Haskell.Hsx.Build--import Data.List (intersperse)--splitTyConApp :: HsType -> P (HsName,[HsType])-splitTyConApp t0 = split t0 []- where- split :: HsType -> [HsType] -> P (HsName,[HsType])- split (HsTyApp t u) ts = split t (u:ts)- split (HsTyCon (UnQual t)) ts = return (t,ts)- split (HsTyInfix a op b) ts = split (HsTyCon op) (a:b:ts)- split _ _ = fail "Illegal data/newtype declaration"---------------------------------------------------------------------------------- Various Syntactic Checks--checkContext :: HsType -> P HsContext-checkContext (HsTyTuple Boxed ts) =- mapM checkAssertion ts-checkContext t = do- c <- checkAssertion t- return [c]---- Changed for multi-parameter type classes.--- Further changed for implicit parameters.--checkAssertion :: HsType -> P HsAsst-checkAssertion (HsTyPred p@(HsIParam n t)) = return p-checkAssertion t = checkAssertion' [] t- where checkAssertion' ts (HsTyCon c) = return $ HsClassA c ts- checkAssertion' ts (HsTyApp a t) = checkAssertion' (t:ts) a- checkAssertion' ts (HsTyInfix a op b) = checkAssertion' (a:b:ts) (HsTyCon op)- checkAssertion' _ _ = fail "Illegal class assertion"---checkDataHeader :: HsType -> P (HsContext,HsName,[HsName])-checkDataHeader (HsTyForall Nothing cs t) = do- (c,ts) <- checkSimple "data/newtype" t []- return (cs,c,ts)-checkDataHeader t = do- (c,ts) <- checkSimple "data/newtype" t []- return ([],c,ts)--checkClassHeader :: HsType -> P (HsContext,HsName,[HsName])-checkClassHeader (HsTyForall Nothing cs t) = do- (c,ts) <- checkSimple "class" t []- return (cs,c,ts)-checkClassHeader t = do- (c,ts) <- checkSimple "class" t []- return ([],c,ts)--checkSimple :: String -> HsType -> [HsName] -> P (HsName,[HsName])-checkSimple kw (HsTyApp l (HsTyVar a)) xs = checkSimple kw l (a:xs)-checkSimple _ (HsTyInfix (HsTyVar a) (UnQual t) (HsTyVar b)) xs = return (t,a:b:xs)-checkSimple _kw (HsTyCon (UnQual t)) xs = return (t,xs)-checkSimple kw _ _ = fail ("Illegal " ++ kw ++ " declaration")--checkInstHeader :: HsType -> P (HsContext,HsQName,[HsType])-checkInstHeader (HsTyForall Nothing cs t) = do- (c,ts) <- checkInsts t []- return (cs,c,ts)-checkInstHeader t = do- (c,ts) <- checkInsts t []- return ([],c,ts)- --checkInsts :: HsType -> [HsType] -> P ((HsQName,[HsType]))-checkInsts (HsTyApp l t) ts = checkInsts l (t:ts)-checkInsts (HsTyCon c) ts = return (c,ts)-checkInsts _ _ = fail "Illegal instance declaration"--{--checkInst :: HsType -> P ()-checkInst (HsTyApp l _) = checkInst l-checkInst (HsTyVar _) = fail "Illegal instance declaration"-checkInst _ = return ()--}---------------------------------------------------------------------------------- Checking Patterns.---- We parse patterns as expressions and check for valid patterns below,--- converting the expression into a pattern at the same time.--checkPattern :: HsExp -> P HsPat-checkPattern e = checkPat e []--checkPat :: HsExp -> [HsPat] -> P HsPat-checkPat (HsCon c) args = return (HsPApp c args)-checkPat (HsApp f x) args = do- x <- checkPat x []- checkPat f (x:args)-checkPat e [] = case e of- HsVar (UnQual x) -> return (HsPVar x)- HsLit l -> return (HsPLit l)- HsInfixApp l op r -> do- l <- checkPat l []- r <- checkPat r []- case op of- HsQConOp c -> return (HsPInfixApp l c r)- _ -> patFail ""- HsTuple es -> do- ps <- mapM (\e -> checkPat e []) es- return (HsPTuple ps)- HsList es -> do- ps <- mapM (\e -> checkPat e []) es- return (HsPList ps)- HsParen e -> do- p <- checkPat e []- return (HsPParen p)- HsAsPat n e -> do- p <- checkPat e []- return (HsPAsPat n p)- HsWildCard -> return HsPWildCard- HsIrrPat e -> do- p <- checkPat e []- return (HsPIrrPat p)- HsRecConstr c fs -> do- fs <- mapM checkPatField fs- return (HsPRec c fs)- HsNegApp (HsLit l) -> return (HsPNeg (HsPLit l))- HsRPats s es -> do- rps <- mapM checkRPattern es- return (HsPRPat s rps)- HsExpTypeSig s e t -> do- p <- checkPat e []- return (HsPatTypeSig s p t)- - -- Hsx- HsXTag s n attrs mattr cs -> do- pattrs <- mapM checkPAttr attrs- pcs <- mapM (\c -> checkPat c []) cs- mpattr <- maybe (return Nothing) - (\e -> do p <- checkPat e []- return $ Just p) - mattr- let cp = mkChildrenPat pcs- return $ HsPXTag s n pattrs mpattr cp- HsXETag s n attrs mattr -> do- pattrs <- mapM checkPAttr attrs- mpattr <- maybe (return Nothing) - (\e -> do p <- checkPat e []- return $ Just p) - mattr- return $ HsPXETag s n pattrs mpattr- HsXPcdata pcdata -> return $ HsPXPcdata pcdata- HsXExpTag e -> do- p <- checkPat e []- return $ HsPXPatTag p- e -> patFail $ show e--checkPat e _ = patFail $ show e--checkPatField :: HsFieldUpdate -> P HsPatField-checkPatField (HsFieldUpdate n e) = do- p <- checkPat e []- return (HsPFieldPat n p)--checkPAttr :: HsXAttr -> P HsPXAttr-checkPAttr (HsXAttr n v) = do p <- checkPat v []- return $ HsPXAttr n p--patFail :: String -> P a-patFail s = fail $ "Parse error in pattern: " ++ s--checkRPattern :: HsExp -> P HsRPat-checkRPattern e = case e of- HsSeqRP es -> do - rps <- mapM checkRPattern es- return $ HsRPSeq rps- HsStarRP e -> do- rp <- checkRPattern e- return $ HsRPStar rp- HsPlusRP e -> do- rp <- checkRPattern e- return $ HsRPPlus rp - HsOptRP e -> do- rp <- checkRPattern e- return $ HsRPOpt rp - HsStarGRP e -> do- rp <- checkRPattern e- return $ HsRPStarG rp- HsPlusGRP e -> do- rp <- checkRPattern e- return $ HsRPPlusG rp - HsOptGRP e -> do- rp <- checkRPattern e- return $ HsRPOptG rp - HsEitherRP e1 e2 -> do- rp1 <- checkRPattern e1- rp2 <- checkRPattern e2- return $ HsRPEither rp1 rp2- HsCAsRP n e -> do- rp <- checkRPattern e- return $ HsRPCAs n rp- HsAsPat n e -> do- rp <- checkRPattern e- return $ HsRPAs n rp- HsParen e -> do- rp <- checkRPattern e- return $ HsRPParen rp- _ -> do- p <- checkPattern e- return $ HsRPPat p---mkChildrenPat :: [HsPat] -> HsPat-mkChildrenPat ps = mkCPAux ps []- where mkCPAux :: [HsPat] -> [HsPat] -> HsPat- mkCPAux [] qs = HsPList $ reverse qs- mkCPAux (p:ps) qs = case p of- (HsPRPat s rps) -> mkCRP s ps (reverse rps ++ map HsRPPat qs)- _ -> mkCPAux ps (p:qs)- - mkCRP :: SrcLoc -> [HsPat] -> [HsRPat] -> HsPat- mkCRP s [] rps = HsPRPat s $ reverse rps- mkCRP s (p:ps) rps = case p of- (HsPRPat _ rqs) -> mkCRP s ps (reverse rqs ++ rps)- _ -> mkCRP s ps (HsRPPat p : rps)---------------------------------------------------------------------------------- Check Expression Syntax--checkExpr :: HsExp -> P HsExp-checkExpr e = case e of- HsVar _ -> return e- HsIPVar _ -> return e- HsCon _ -> return e- HsLit _ -> return e- HsInfixApp e1 op e2 -> check2Exprs e1 e2 (flip HsInfixApp op)- HsApp e1 e2 -> check2Exprs e1 e2 HsApp- HsNegApp e -> check1Expr e HsNegApp- HsLambda loc ps e -> check1Expr e (HsLambda loc ps)- HsLet bs e -> check1Expr e (HsLet bs)- HsDLet bs e -> check1Expr e (HsDLet bs)- HsWith e bs -> check1Expr e (flip HsWith bs)- HsIf e1 e2 e3 -> check3Exprs e1 e2 e3 HsIf- HsCase e alts -> do- alts <- mapM checkAlt alts- e <- checkExpr e- return (HsCase e alts)- HsDo stmts -> do- stmts <- mapM checkStmt stmts- return (HsDo stmts)- HsMDo stmts -> do- stmts <- mapM checkStmt stmts- return (HsMDo stmts)- HsTuple es -> checkManyExprs es HsTuple- HsList es -> checkManyExprs es HsList- HsParen e -> check1Expr e HsParen- HsLeftSection e op -> check1Expr e (flip HsLeftSection op)- HsRightSection op e -> check1Expr e (HsRightSection op)- HsRecConstr c fields -> do- fields <- mapM checkField fields- return (HsRecConstr c fields)- HsRecUpdate e fields -> do- fields <- mapM checkField fields- e <- checkExpr e- return (HsRecUpdate e fields)- HsEnumFrom e -> check1Expr e HsEnumFrom- HsEnumFromTo e1 e2 -> check2Exprs e1 e2 HsEnumFromTo- HsEnumFromThen e1 e2 -> check2Exprs e1 e2 HsEnumFromThen- HsEnumFromThenTo e1 e2 e3 -> check3Exprs e1 e2 e3 HsEnumFromThenTo- HsListComp e stmts -> do- stmts <- mapM checkStmt stmts- e <- checkExpr e- return (HsListComp e stmts)- HsExpTypeSig loc e ty -> do- e <- checkExpr e- return (HsExpTypeSig loc e ty)- - --Template Haskell- HsReifyExp _ -> return e- HsBracketExp _ -> return e- HsSpliceExp _ -> return e- - -- Hsx- HsXTag s n attrs mattr cs -> do attrs <- mapM checkAttr attrs- cs <- mapM checkExpr cs- mattr <- maybe (return Nothing) - (\e -> checkExpr e >>= return . Just) - mattr - return $ HsXTag s n attrs mattr cs- HsXETag s n attrs mattr -> do attrs <- mapM checkAttr attrs- mattr <- maybe (return Nothing) - (\e -> checkExpr e >>= return . Just) - mattr - return $ HsXETag s n attrs mattr - HsXPcdata _ -> return e- HsXExpTag e -> do e <- checkExpr e- return $ HsXExpTag e- _ -> fail $ "Parse error in expression: " ++ show e--checkAttr :: HsXAttr -> P HsXAttr-checkAttr (HsXAttr n v) = do v <- checkExpr v- return $ HsXAttr n v---- type signature for polymorphic recursion!!-check1Expr :: HsExp -> (HsExp -> a) -> P a-check1Expr e1 f = do- e1 <- checkExpr e1- return (f e1)--check2Exprs :: HsExp -> HsExp -> (HsExp -> HsExp -> a) -> P a-check2Exprs e1 e2 f = do- e1 <- checkExpr e1- e2 <- checkExpr e2- return (f e1 e2)--check3Exprs :: HsExp -> HsExp -> HsExp -> (HsExp -> HsExp -> HsExp -> a) -> P a-check3Exprs e1 e2 e3 f = do- e1 <- checkExpr e1- e2 <- checkExpr e2- e3 <- checkExpr e3- return (f e1 e2 e3)--checkManyExprs :: [HsExp] -> ([HsExp] -> a) -> P a-checkManyExprs es f = do- es <- mapM checkExpr es- return (f es)--checkAlt :: HsAlt -> P HsAlt-checkAlt (HsAlt loc p galts bs) = do- galts <- checkGAlts galts- return (HsAlt loc p galts bs)--checkGAlts :: HsGuardedAlts -> P HsGuardedAlts-checkGAlts (HsUnGuardedAlt e) = check1Expr e HsUnGuardedAlt-checkGAlts (HsGuardedAlts galts) = do- galts <- mapM checkGAlt galts- return (HsGuardedAlts galts)--checkGAlt :: HsGuardedAlt -> P HsGuardedAlt-checkGAlt (HsGuardedAlt loc g e) = check1Expr e (HsGuardedAlt loc g)--checkStmt :: HsStmt -> P HsStmt-checkStmt (HsGenerator loc p e) = check1Expr e (HsGenerator loc p)-checkStmt (HsQualifier e) = check1Expr e HsQualifier-checkStmt s@(HsLetStmt _) = return s--checkField :: HsFieldUpdate -> P HsFieldUpdate-checkField (HsFieldUpdate n e) = check1Expr e (HsFieldUpdate n)--getGConName :: HsExp -> P HsQName-getGConName (HsCon n) = return n-getGConName (HsList []) = return list_cons_name-getGConName _ = fail "Expression in reification is not a name"---------------------------------------------------------------------------------- Check Equation Syntax--checkValDef :: SrcLoc -> HsExp -> HsRhs -> HsBinds -> P HsDecl-checkValDef srcloc lhs rhs whereBinds =- case isFunLhs lhs [] of- Just (f,es) -> do- ps <- mapM checkPattern es- return (HsFunBind [HsMatch srcloc f ps rhs whereBinds])- Nothing -> do- lhs <- checkPattern lhs- return (HsPatBind srcloc lhs rhs whereBinds)---- A variable binding is parsed as an HsPatBind.--isFunLhs :: HsExp -> [HsExp] -> Maybe (HsName, [HsExp])-isFunLhs (HsInfixApp l (HsQVarOp (UnQual op)) r) es = Just (op, l:r:es)-isFunLhs (HsApp (HsVar (UnQual f)) e) es = Just (f, e:es)-isFunLhs (HsApp (HsParen f) e) es = isFunLhs f (e:es)-isFunLhs (HsApp f e) es = isFunLhs f (e:es)-isFunLhs _ _ = Nothing---------------------------------------------------------------------------------- In a class or instance body, a pattern binding must be of a variable.--checkClassBody :: [HsDecl] -> P [HsDecl]-checkClassBody decls = do- mapM_ checkMethodDef decls- return decls--checkMethodDef :: HsDecl -> P ()-checkMethodDef (HsPatBind _ (HsPVar _) _ _) = return ()-checkMethodDef (HsPatBind loc _ _ _) =- fail "illegal method definition" `atSrcLoc` loc-checkMethodDef _ = return ()---------------------------------------------------------------------------------- Check that an identifier or symbol is unqualified.--- For occasions when doing this in the grammar would cause conflicts.--checkUnQual :: HsQName -> P HsName-checkUnQual (Qual _ _) = fail "Illegal qualified name"-checkUnQual (UnQual n) = return n-checkUnQual (Special _) = fail "Illegal special name"---------------------------------------------------------------------------------- Check that two xml tag names are equal--- Could use Eq directly, but I am not sure whether <dom:name>...</name> --- would be valid, in that case Eq won't work. TODO--checkEqNames :: HsXName -> HsXName -> P HsXName-checkEqNames n@(HsXName n1) (HsXName n2) - | n1 == n2 = return n- | otherwise = fail "names in matching xml tags are not equal"-checkEqNames n@(HsXDomName d1 n1) (HsXDomName d2 n2)- | n1 == n2 && d1 == d2 = return n- | otherwise = fail "names in matching xml tags are not equal"-checkEqNames _ _ = fail "names in matching xml tags are not equal"----------------------------------------------------------------------------------- Miscellaneous utilities--checkPrec :: Integer -> P Int-checkPrec i | 0 <= i && i <= 9 = return (fromInteger i)-checkPrec i | otherwise = fail ("Illegal precedence " ++ show i)--mkRecConstrOrUpdate :: HsExp -> [HsFieldUpdate] -> P HsExp-mkRecConstrOrUpdate (HsCon c) fs = return (HsRecConstr c fs)-mkRecConstrOrUpdate e fs@(_:_) = return (HsRecUpdate e fs)-mkRecConstrOrUpdate _ _ = fail "Empty record update"---------------------------------------------------------------------------------- Reverse a list of declarations, merging adjacent HsFunBinds of the--- same name and checking that their arities match.--checkRevDecls :: [HsDecl] -> P [HsDecl]-checkRevDecls = mergeFunBinds []- where- mergeFunBinds revDs [] = return revDs- mergeFunBinds revDs (HsFunBind ms1@(HsMatch _ name ps _ _:_):ds1) =- mergeMatches ms1 ds1- where- arity = length ps- mergeMatches ms' (HsFunBind ms@(HsMatch loc name' ps' _ _:_):ds)- | name' == name =- if length ps' /= arity- then fail ("arity mismatch for '" ++ prettyPrint name ++ "'")- `atSrcLoc` loc- else mergeMatches (ms++ms') ds- mergeMatches ms' ds = mergeFunBinds (HsFunBind ms':revDs) ds- mergeFunBinds revDs (d:ds) = mergeFunBinds (d:revDs) ds--------------------------------------------- Converting a complete page--pageFun :: SrcLoc -> HsExp -> HsDecl-pageFun loc e = HsPatBind loc namePat rhs (HsBDecls [])- where namePat = HsPVar $ HsIdent "page"- rhs = HsUnGuardedRhs e--mkPage :: HsModule -> SrcLoc -> HsExp -> P HsModule-mkPage (HsModule src md exps imps decls) loc xml = do- let page = pageFun loc xml- return $ HsModule src md exps imps (decls ++ [page])- -mkPageModule :: HsExp -> P HsModule-mkPageModule xml = do - do loc <- case xml of - HsXTag l _ _ _ _ -> return l- HsXETag l _ _ _ -> return l- _ -> fail "Will not happen since mkPageModule is only called on XML expressions"- mod <- getModuleName- return $ (HsModule - loc- (Module mod)- (Just [HsEVar $ UnQual $ HsIdent "page"])- []- [pageFun loc xml])-------------------------------------------- Handle dash-identifiers--mkDVar :: [String] -> String-mkDVar = concat . intersperse "-"--mkDVarExpr :: [String] -> HsExp-mkDVarExpr = foldl1 (\x y -> infixApp x (op $ sym "-") y) . map (var . name)-------------------------------------------- Combine adjacent for-alls. ------ A valid type must have one for-all at the top of the type, or of the fn arg types--mkHsTyForall :: Maybe [HsName] -> HsContext -> HsType -> HsType-mkHsTyForall mtvs [] ty = mk_forall_ty mtvs ty-mkHsTyForall mtvs ctxt ty = HsTyForall mtvs ctxt ty---- mk_forall_ty makes a pure for-all type (no context)-mk_forall_ty (Just []) ty = ty -- Explicit for-all with no tyvars-mk_forall_ty mtvs1 (HsTyForall mtvs2 ctxt ty) = mkHsTyForall (mtvs1 `plus` mtvs2) ctxt ty-mk_forall_ty mtvs1 ty = HsTyForall mtvs1 [] ty--mtvs1 `plus` Nothing = mtvs1-Nothing `plus` mtvs2 = mtvs2 -(Just tvs1) `plus` (Just tvs2) = Just (tvs1 ++ tvs2)
− Language/Haskell/Hsx/Parser.hs
@@ -1,5426 +0,0 @@-{-# OPTIONS -fglasgow-exts -cpp #-}--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Hsx.Parser--- Original : Language.Haskell.Parser--- Copyright : (c) Niklas Broberg 2004,--- Original (c) Simon Marlow, Sven Panne 1997-2000--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se--- Stability : experimental--- Portability : portable-------------------------------------------------------------------------------------module Language.Haskell.Hsx.Parser (- parseModule, parseModuleWithMode,- ParseMode(..), defaultParseMode, ParseResult(..)) where--import Language.Haskell.Hsx.Syntax-import Language.Haskell.Hsx.ParseMonad-import Language.Haskell.Hsx.Lexer-import Language.Haskell.Hsx.ParseUtils-#if __GLASGOW_HASKELL__ >= 503-import Data.Array-#else-import Array-#endif-#if __GLASGOW_HASKELL__ >= 503-import GHC.Exts-#else-import GlaExts-#endif---- parser produced by Happy Version 1.17--newtype HappyAbsSyn = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = GHC.Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn4 :: (HsModule) -> (HappyAbsSyn )-happyIn4 x = unsafeCoerce# x-{-# INLINE happyIn4 #-}-happyOut4 :: (HappyAbsSyn ) -> (HsModule)-happyOut4 x = unsafeCoerce# x-{-# INLINE happyOut4 #-}-happyIn5 :: (HsExp) -> (HappyAbsSyn )-happyIn5 x = unsafeCoerce# x-{-# INLINE happyIn5 #-}-happyOut5 :: (HappyAbsSyn ) -> (HsExp)-happyOut5 x = unsafeCoerce# x-{-# INLINE happyOut5 #-}-happyIn6 :: (HsModule) -> (HappyAbsSyn )-happyIn6 x = unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn ) -> (HsModule)-happyOut6 x = unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: (([HsImportDecl],[HsDecl])) -> (HappyAbsSyn )-happyIn7 x = unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn ) -> (([HsImportDecl],[HsDecl]))-happyOut7 x = unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (([HsImportDecl],[HsDecl])) -> (HappyAbsSyn )-happyIn8 x = unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn ) -> (([HsImportDecl],[HsDecl]))-happyOut8 x = unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: (()) -> (HappyAbsSyn )-happyIn9 x = unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn ) -> (())-happyOut9 x = unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: (()) -> (HappyAbsSyn )-happyIn10 x = unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn ) -> (())-happyOut10 x = unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: (Maybe [HsExportSpec]) -> (HappyAbsSyn )-happyIn11 x = unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn ) -> (Maybe [HsExportSpec])-happyOut11 x = unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: ([HsExportSpec]) -> (HappyAbsSyn )-happyIn12 x = unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn ) -> ([HsExportSpec])-happyOut12 x = unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: (()) -> (HappyAbsSyn )-happyIn13 x = unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn ) -> (())-happyOut13 x = unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: ([HsExportSpec]) -> (HappyAbsSyn )-happyIn14 x = unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn ) -> ([HsExportSpec])-happyOut14 x = unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (HsExportSpec) -> (HappyAbsSyn )-happyIn15 x = unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn ) -> (HsExportSpec)-happyOut15 x = unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: ([HsImportDecl]) -> (HappyAbsSyn )-happyIn16 x = unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn ) -> ([HsImportDecl])-happyOut16 x = unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: (HsImportDecl) -> (HappyAbsSyn )-happyIn17 x = unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn ) -> (HsImportDecl)-happyOut17 x = unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Bool) -> (HappyAbsSyn )-happyIn18 x = unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn ) -> (Bool)-happyOut18 x = unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: (Maybe Module) -> (HappyAbsSyn )-happyIn19 x = unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn ) -> (Maybe Module)-happyOut19 x = unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: (Maybe (Bool, [HsImportSpec])) -> (HappyAbsSyn )-happyIn20 x = unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn ) -> (Maybe (Bool, [HsImportSpec]))-happyOut20 x = unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyIn21 :: ((Bool, [HsImportSpec])) -> (HappyAbsSyn )-happyIn21 x = unsafeCoerce# x-{-# INLINE happyIn21 #-}-happyOut21 :: (HappyAbsSyn ) -> ((Bool, [HsImportSpec]))-happyOut21 x = unsafeCoerce# x-{-# INLINE happyOut21 #-}-happyIn22 :: (Bool) -> (HappyAbsSyn )-happyIn22 x = unsafeCoerce# x-{-# INLINE happyIn22 #-}-happyOut22 :: (HappyAbsSyn ) -> (Bool)-happyOut22 x = unsafeCoerce# x-{-# INLINE happyOut22 #-}-happyIn23 :: ([HsImportSpec]) -> (HappyAbsSyn )-happyIn23 x = unsafeCoerce# x-{-# INLINE happyIn23 #-}-happyOut23 :: (HappyAbsSyn ) -> ([HsImportSpec])-happyOut23 x = unsafeCoerce# x-{-# INLINE happyOut23 #-}-happyIn24 :: (HsImportSpec) -> (HappyAbsSyn )-happyIn24 x = unsafeCoerce# x-{-# INLINE happyIn24 #-}-happyOut24 :: (HappyAbsSyn ) -> (HsImportSpec)-happyOut24 x = unsafeCoerce# x-{-# INLINE happyOut24 #-}-happyIn25 :: ([HsCName]) -> (HappyAbsSyn )-happyIn25 x = unsafeCoerce# x-{-# INLINE happyIn25 #-}-happyOut25 :: (HappyAbsSyn ) -> ([HsCName])-happyOut25 x = unsafeCoerce# x-{-# INLINE happyOut25 #-}-happyIn26 :: (HsCName) -> (HappyAbsSyn )-happyIn26 x = unsafeCoerce# x-{-# INLINE happyIn26 #-}-happyOut26 :: (HappyAbsSyn ) -> (HsCName)-happyOut26 x = unsafeCoerce# x-{-# INLINE happyOut26 #-}-happyIn27 :: (HsDecl) -> (HappyAbsSyn )-happyIn27 x = unsafeCoerce# x-{-# INLINE happyIn27 #-}-happyOut27 :: (HappyAbsSyn ) -> (HsDecl)-happyOut27 x = unsafeCoerce# x-{-# INLINE happyOut27 #-}-happyIn28 :: (Int) -> (HappyAbsSyn )-happyIn28 x = unsafeCoerce# x-{-# INLINE happyIn28 #-}-happyOut28 :: (HappyAbsSyn ) -> (Int)-happyOut28 x = unsafeCoerce# x-{-# INLINE happyOut28 #-}-happyIn29 :: (HsAssoc) -> (HappyAbsSyn )-happyIn29 x = unsafeCoerce# x-{-# INLINE happyIn29 #-}-happyOut29 :: (HappyAbsSyn ) -> (HsAssoc)-happyOut29 x = unsafeCoerce# x-{-# INLINE happyOut29 #-}-happyIn30 :: ([HsOp]) -> (HappyAbsSyn )-happyIn30 x = unsafeCoerce# x-{-# INLINE happyIn30 #-}-happyOut30 :: (HappyAbsSyn ) -> ([HsOp])-happyOut30 x = unsafeCoerce# x-{-# INLINE happyOut30 #-}-happyIn31 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn31 x = unsafeCoerce# x-{-# INLINE happyIn31 #-}-happyOut31 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut31 x = unsafeCoerce# x-{-# INLINE happyOut31 #-}-happyIn32 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn32 x = unsafeCoerce# x-{-# INLINE happyIn32 #-}-happyOut32 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut32 x = unsafeCoerce# x-{-# INLINE happyOut32 #-}-happyIn33 :: (HsDecl) -> (HappyAbsSyn )-happyIn33 x = unsafeCoerce# x-{-# INLINE happyIn33 #-}-happyOut33 :: (HappyAbsSyn ) -> (HsDecl)-happyOut33 x = unsafeCoerce# x-{-# INLINE happyOut33 #-}-happyIn34 :: ([HsType]) -> (HappyAbsSyn )-happyIn34 x = unsafeCoerce# x-{-# INLINE happyIn34 #-}-happyOut34 :: (HappyAbsSyn ) -> ([HsType])-happyOut34 x = unsafeCoerce# x-{-# INLINE happyOut34 #-}-happyIn35 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn35 x = unsafeCoerce# x-{-# INLINE happyIn35 #-}-happyOut35 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut35 x = unsafeCoerce# x-{-# INLINE happyOut35 #-}-happyIn36 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn36 x = unsafeCoerce# x-{-# INLINE happyIn36 #-}-happyOut36 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut36 x = unsafeCoerce# x-{-# INLINE happyOut36 #-}-happyIn37 :: (HsDecl) -> (HappyAbsSyn )-happyIn37 x = unsafeCoerce# x-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn ) -> (HsDecl)-happyOut37 x = unsafeCoerce# x-{-# INLINE happyOut37 #-}-happyIn38 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn38 x = unsafeCoerce# x-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut38 x = unsafeCoerce# x-{-# INLINE happyOut38 #-}-happyIn39 :: (HsDecl) -> (HappyAbsSyn )-happyIn39 x = unsafeCoerce# x-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn ) -> (HsDecl)-happyOut39 x = unsafeCoerce# x-{-# INLINE happyOut39 #-}-happyIn40 :: (HsBinds) -> (HappyAbsSyn )-happyIn40 x = unsafeCoerce# x-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn ) -> (HsBinds)-happyOut40 x = unsafeCoerce# x-{-# INLINE happyOut40 #-}-happyIn41 :: ([HsName]) -> (HappyAbsSyn )-happyIn41 x = unsafeCoerce# x-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn ) -> ([HsName])-happyOut41 x = unsafeCoerce# x-{-# INLINE happyOut41 #-}-happyIn42 :: (HsCallConv) -> (HappyAbsSyn )-happyIn42 x = unsafeCoerce# x-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn ) -> (HsCallConv)-happyOut42 x = unsafeCoerce# x-{-# INLINE happyOut42 #-}-happyIn43 :: (HsSafety) -> (HappyAbsSyn )-happyIn43 x = unsafeCoerce# x-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn ) -> (HsSafety)-happyOut43 x = unsafeCoerce# x-{-# INLINE happyOut43 #-}-happyIn44 :: ((String, HsName, HsType)) -> (HappyAbsSyn )-happyIn44 x = unsafeCoerce# x-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn ) -> ((String, HsName, HsType))-happyOut44 x = unsafeCoerce# x-{-# INLINE happyOut44 #-}-happyIn45 :: (HsType) -> (HappyAbsSyn )-happyIn45 x = unsafeCoerce# x-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn ) -> (HsType)-happyOut45 x = unsafeCoerce# x-{-# INLINE happyOut45 #-}-happyIn46 :: (HsType) -> (HappyAbsSyn )-happyIn46 x = unsafeCoerce# x-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn ) -> (HsType)-happyOut46 x = unsafeCoerce# x-{-# INLINE happyOut46 #-}-happyIn47 :: (HsType) -> (HappyAbsSyn )-happyIn47 x = unsafeCoerce# x-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn ) -> (HsType)-happyOut47 x = unsafeCoerce# x-{-# INLINE happyOut47 #-}-happyIn48 :: (HsType) -> (HappyAbsSyn )-happyIn48 x = unsafeCoerce# x-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn ) -> (HsType)-happyOut48 x = unsafeCoerce# x-{-# INLINE happyOut48 #-}-happyIn49 :: (HsQName) -> (HappyAbsSyn )-happyIn49 x = unsafeCoerce# x-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn ) -> (HsQName)-happyOut49 x = unsafeCoerce# x-{-# INLINE happyOut49 #-}-happyIn50 :: (HsQName) -> (HappyAbsSyn )-happyIn50 x = unsafeCoerce# x-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn ) -> (HsQName)-happyOut50 x = unsafeCoerce# x-{-# INLINE happyOut50 #-}-happyIn51 :: (HsType) -> (HappyAbsSyn )-happyIn51 x = unsafeCoerce# x-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn ) -> (HsType)-happyOut51 x = unsafeCoerce# x-{-# INLINE happyOut51 #-}-happyIn52 :: (HsContext) -> (HappyAbsSyn )-happyIn52 x = unsafeCoerce# x-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn ) -> (HsContext)-happyOut52 x = unsafeCoerce# x-{-# INLINE happyOut52 #-}-happyIn53 :: ([HsType]) -> (HappyAbsSyn )-happyIn53 x = unsafeCoerce# x-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn ) -> ([HsType])-happyOut53 x = unsafeCoerce# x-{-# INLINE happyOut53 #-}-happyIn54 :: ([HsType]) -> (HappyAbsSyn )-happyIn54 x = unsafeCoerce# x-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn ) -> ([HsType])-happyOut54 x = unsafeCoerce# x-{-# INLINE happyOut54 #-}-happyIn55 :: ((HsName, [HsName])) -> (HappyAbsSyn )-happyIn55 x = unsafeCoerce# x-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn ) -> ((HsName, [HsName]))-happyOut55 x = unsafeCoerce# x-{-# INLINE happyOut55 #-}-happyIn56 :: ([HsName]) -> (HappyAbsSyn )-happyIn56 x = unsafeCoerce# x-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn ) -> ([HsName])-happyOut56 x = unsafeCoerce# x-{-# INLINE happyOut56 #-}-happyIn57 :: ([HsFunDep]) -> (HappyAbsSyn )-happyIn57 x = unsafeCoerce# x-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn ) -> ([HsFunDep])-happyOut57 x = unsafeCoerce# x-{-# INLINE happyOut57 #-}-happyIn58 :: ([HsFunDep]) -> (HappyAbsSyn )-happyIn58 x = unsafeCoerce# x-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn ) -> ([HsFunDep])-happyOut58 x = unsafeCoerce# x-{-# INLINE happyOut58 #-}-happyIn59 :: (HsFunDep) -> (HappyAbsSyn )-happyIn59 x = unsafeCoerce# x-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn ) -> (HsFunDep)-happyOut59 x = unsafeCoerce# x-{-# INLINE happyOut59 #-}-happyIn60 :: ([HsGadtDecl]) -> (HappyAbsSyn )-happyIn60 x = unsafeCoerce# x-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn ) -> ([HsGadtDecl])-happyOut60 x = unsafeCoerce# x-{-# INLINE happyOut60 #-}-happyIn61 :: ([HsGadtDecl]) -> (HappyAbsSyn )-happyIn61 x = unsafeCoerce# x-{-# INLINE happyIn61 #-}-happyOut61 :: (HappyAbsSyn ) -> ([HsGadtDecl])-happyOut61 x = unsafeCoerce# x-{-# INLINE happyOut61 #-}-happyIn62 :: ([HsGadtDecl]) -> (HappyAbsSyn )-happyIn62 x = unsafeCoerce# x-{-# INLINE happyIn62 #-}-happyOut62 :: (HappyAbsSyn ) -> ([HsGadtDecl])-happyOut62 x = unsafeCoerce# x-{-# INLINE happyOut62 #-}-happyIn63 :: (HsGadtDecl) -> (HappyAbsSyn )-happyIn63 x = unsafeCoerce# x-{-# INLINE happyIn63 #-}-happyOut63 :: (HappyAbsSyn ) -> (HsGadtDecl)-happyOut63 x = unsafeCoerce# x-{-# INLINE happyOut63 #-}-happyIn64 :: ([HsQualConDecl]) -> (HappyAbsSyn )-happyIn64 x = unsafeCoerce# x-{-# INLINE happyIn64 #-}-happyOut64 :: (HappyAbsSyn ) -> ([HsQualConDecl])-happyOut64 x = unsafeCoerce# x-{-# INLINE happyOut64 #-}-happyIn65 :: ([HsQualConDecl]) -> (HappyAbsSyn )-happyIn65 x = unsafeCoerce# x-{-# INLINE happyIn65 #-}-happyOut65 :: (HappyAbsSyn ) -> ([HsQualConDecl])-happyOut65 x = unsafeCoerce# x-{-# INLINE happyOut65 #-}-happyIn66 :: (HsQualConDecl) -> (HappyAbsSyn )-happyIn66 x = unsafeCoerce# x-{-# INLINE happyIn66 #-}-happyOut66 :: (HappyAbsSyn ) -> (HsQualConDecl)-happyOut66 x = unsafeCoerce# x-{-# INLINE happyOut66 #-}-happyIn67 :: ([HsName]) -> (HappyAbsSyn )-happyIn67 x = unsafeCoerce# x-{-# INLINE happyIn67 #-}-happyOut67 :: (HappyAbsSyn ) -> ([HsName])-happyOut67 x = unsafeCoerce# x-{-# INLINE happyOut67 #-}-happyIn68 :: (HsConDecl) -> (HappyAbsSyn )-happyIn68 x = unsafeCoerce# x-{-# INLINE happyIn68 #-}-happyOut68 :: (HappyAbsSyn ) -> (HsConDecl)-happyOut68 x = unsafeCoerce# x-{-# INLINE happyOut68 #-}-happyIn69 :: ((HsName, [HsBangType])) -> (HappyAbsSyn )-happyIn69 x = unsafeCoerce# x-{-# INLINE happyIn69 #-}-happyOut69 :: (HappyAbsSyn ) -> ((HsName, [HsBangType]))-happyOut69 x = unsafeCoerce# x-{-# INLINE happyOut69 #-}-happyIn70 :: ((HsName, [HsBangType])) -> (HappyAbsSyn )-happyIn70 x = unsafeCoerce# x-{-# INLINE happyIn70 #-}-happyOut70 :: (HappyAbsSyn ) -> ((HsName, [HsBangType]))-happyOut70 x = unsafeCoerce# x-{-# INLINE happyOut70 #-}-happyIn71 :: (HsBangType) -> (HappyAbsSyn )-happyIn71 x = unsafeCoerce# x-{-# INLINE happyIn71 #-}-happyOut71 :: (HappyAbsSyn ) -> (HsBangType)-happyOut71 x = unsafeCoerce# x-{-# INLINE happyOut71 #-}-happyIn72 :: (HsBangType) -> (HappyAbsSyn )-happyIn72 x = unsafeCoerce# x-{-# INLINE happyIn72 #-}-happyOut72 :: (HappyAbsSyn ) -> (HsBangType)-happyOut72 x = unsafeCoerce# x-{-# INLINE happyOut72 #-}-happyIn73 :: ([([HsName],HsBangType)]) -> (HappyAbsSyn )-happyIn73 x = unsafeCoerce# x-{-# INLINE happyIn73 #-}-happyOut73 :: (HappyAbsSyn ) -> ([([HsName],HsBangType)])-happyOut73 x = unsafeCoerce# x-{-# INLINE happyOut73 #-}-happyIn74 :: (([HsName],HsBangType)) -> (HappyAbsSyn )-happyIn74 x = unsafeCoerce# x-{-# INLINE happyIn74 #-}-happyOut74 :: (HappyAbsSyn ) -> (([HsName],HsBangType))-happyOut74 x = unsafeCoerce# x-{-# INLINE happyOut74 #-}-happyIn75 :: (HsBangType) -> (HappyAbsSyn )-happyIn75 x = unsafeCoerce# x-{-# INLINE happyIn75 #-}-happyOut75 :: (HappyAbsSyn ) -> (HsBangType)-happyOut75 x = unsafeCoerce# x-{-# INLINE happyOut75 #-}-happyIn76 :: ([HsQName]) -> (HappyAbsSyn )-happyIn76 x = unsafeCoerce# x-{-# INLINE happyIn76 #-}-happyOut76 :: (HappyAbsSyn ) -> ([HsQName])-happyOut76 x = unsafeCoerce# x-{-# INLINE happyOut76 #-}-happyIn77 :: ([HsQName]) -> (HappyAbsSyn )-happyIn77 x = unsafeCoerce# x-{-# INLINE happyIn77 #-}-happyOut77 :: (HappyAbsSyn ) -> ([HsQName])-happyOut77 x = unsafeCoerce# x-{-# INLINE happyOut77 #-}-happyIn78 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn78 x = unsafeCoerce# x-{-# INLINE happyIn78 #-}-happyOut78 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut78 x = unsafeCoerce# x-{-# INLINE happyOut78 #-}-happyIn79 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn79 x = unsafeCoerce# x-{-# INLINE happyIn79 #-}-happyOut79 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut79 x = unsafeCoerce# x-{-# INLINE happyOut79 #-}-happyIn80 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn80 x = unsafeCoerce# x-{-# INLINE happyIn80 #-}-happyOut80 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut80 x = unsafeCoerce# x-{-# INLINE happyOut80 #-}-happyIn81 :: ([HsDecl]) -> (HappyAbsSyn )-happyIn81 x = unsafeCoerce# x-{-# INLINE happyIn81 #-}-happyOut81 :: (HappyAbsSyn ) -> ([HsDecl])-happyOut81 x = unsafeCoerce# x-{-# INLINE happyOut81 #-}-happyIn82 :: (HsDecl) -> (HappyAbsSyn )-happyIn82 x = unsafeCoerce# x-{-# INLINE happyIn82 #-}-happyOut82 :: (HappyAbsSyn ) -> (HsDecl)-happyOut82 x = unsafeCoerce# x-{-# INLINE happyOut82 #-}-happyIn83 :: (HsBinds) -> (HappyAbsSyn )-happyIn83 x = unsafeCoerce# x-{-# INLINE happyIn83 #-}-happyOut83 :: (HappyAbsSyn ) -> (HsBinds)-happyOut83 x = unsafeCoerce# x-{-# INLINE happyOut83 #-}-happyIn84 :: (HsRhs) -> (HappyAbsSyn )-happyIn84 x = unsafeCoerce# x-{-# INLINE happyIn84 #-}-happyOut84 :: (HappyAbsSyn ) -> (HsRhs)-happyOut84 x = unsafeCoerce# x-{-# INLINE happyOut84 #-}-happyIn85 :: ([HsGuardedRhs]) -> (HappyAbsSyn )-happyIn85 x = unsafeCoerce# x-{-# INLINE happyIn85 #-}-happyOut85 :: (HappyAbsSyn ) -> ([HsGuardedRhs])-happyOut85 x = unsafeCoerce# x-{-# INLINE happyOut85 #-}-happyIn86 :: (HsGuardedRhs) -> (HappyAbsSyn )-happyIn86 x = unsafeCoerce# x-{-# INLINE happyIn86 #-}-happyOut86 :: (HappyAbsSyn ) -> (HsGuardedRhs)-happyOut86 x = unsafeCoerce# x-{-# INLINE happyOut86 #-}-happyIn87 :: (HsExp) -> (HappyAbsSyn )-happyIn87 x = unsafeCoerce# x-{-# INLINE happyIn87 #-}-happyOut87 :: (HappyAbsSyn ) -> (HsExp)-happyOut87 x = unsafeCoerce# x-{-# INLINE happyOut87 #-}-happyIn88 :: (HsExp) -> (HappyAbsSyn )-happyIn88 x = unsafeCoerce# x-{-# INLINE happyIn88 #-}-happyOut88 :: (HappyAbsSyn ) -> (HsExp)-happyOut88 x = unsafeCoerce# x-{-# INLINE happyOut88 #-}-happyIn89 :: (HsExp) -> (HappyAbsSyn )-happyIn89 x = unsafeCoerce# x-{-# INLINE happyIn89 #-}-happyOut89 :: (HappyAbsSyn ) -> (HsExp)-happyOut89 x = unsafeCoerce# x-{-# INLINE happyOut89 #-}-happyIn90 :: (HsExp) -> (HappyAbsSyn )-happyIn90 x = unsafeCoerce# x-{-# INLINE happyIn90 #-}-happyOut90 :: (HappyAbsSyn ) -> (HsExp)-happyOut90 x = unsafeCoerce# x-{-# INLINE happyOut90 #-}-happyIn91 :: (HsExp) -> (HappyAbsSyn )-happyIn91 x = unsafeCoerce# x-{-# INLINE happyIn91 #-}-happyOut91 :: (HappyAbsSyn ) -> (HsExp)-happyOut91 x = unsafeCoerce# x-{-# INLINE happyOut91 #-}-happyIn92 :: (HsExp) -> (HappyAbsSyn )-happyIn92 x = unsafeCoerce# x-{-# INLINE happyIn92 #-}-happyOut92 :: (HappyAbsSyn ) -> (HsExp)-happyOut92 x = unsafeCoerce# x-{-# INLINE happyOut92 #-}-happyIn93 :: (HsExp) -> (HappyAbsSyn )-happyIn93 x = unsafeCoerce# x-{-# INLINE happyIn93 #-}-happyOut93 :: (HappyAbsSyn ) -> (HsExp)-happyOut93 x = unsafeCoerce# x-{-# INLINE happyOut93 #-}-happyIn94 :: ([HsPat]) -> (HappyAbsSyn )-happyIn94 x = unsafeCoerce# x-{-# INLINE happyIn94 #-}-happyOut94 :: (HappyAbsSyn ) -> ([HsPat])-happyOut94 x = unsafeCoerce# x-{-# INLINE happyOut94 #-}-happyIn95 :: (HsPat) -> (HappyAbsSyn )-happyIn95 x = unsafeCoerce# x-{-# INLINE happyIn95 #-}-happyOut95 :: (HappyAbsSyn ) -> (HsPat)-happyOut95 x = unsafeCoerce# x-{-# INLINE happyOut95 #-}-happyIn96 :: (HsExp) -> (HappyAbsSyn )-happyIn96 x = unsafeCoerce# x-{-# INLINE happyIn96 #-}-happyOut96 :: (HappyAbsSyn ) -> (HsExp)-happyOut96 x = unsafeCoerce# x-{-# INLINE happyOut96 #-}-happyIn97 :: (HsExp) -> (HappyAbsSyn )-happyIn97 x = unsafeCoerce# x-{-# INLINE happyIn97 #-}-happyOut97 :: (HappyAbsSyn ) -> (HsExp)-happyOut97 x = unsafeCoerce# x-{-# INLINE happyOut97 #-}-happyIn98 :: (HsExp) -> (HappyAbsSyn )-happyIn98 x = unsafeCoerce# x-{-# INLINE happyIn98 #-}-happyOut98 :: (HappyAbsSyn ) -> (HsExp)-happyOut98 x = unsafeCoerce# x-{-# INLINE happyOut98 #-}-happyIn99 :: (HsReify) -> (HappyAbsSyn )-happyIn99 x = unsafeCoerce# x-{-# INLINE happyIn99 #-}-happyOut99 :: (HappyAbsSyn ) -> (HsReify)-happyOut99 x = unsafeCoerce# x-{-# INLINE happyOut99 #-}-happyIn100 :: (HsQName) -> (HappyAbsSyn )-happyIn100 x = unsafeCoerce# x-{-# INLINE happyIn100 #-}-happyOut100 :: (HappyAbsSyn ) -> (HsQName)-happyOut100 x = unsafeCoerce# x-{-# INLINE happyOut100 #-}-happyIn101 :: (Int) -> (HappyAbsSyn )-happyIn101 x = unsafeCoerce# x-{-# INLINE happyIn101 #-}-happyOut101 :: (HappyAbsSyn ) -> (Int)-happyOut101 x = unsafeCoerce# x-{-# INLINE happyOut101 #-}-happyIn102 :: ([HsExp]) -> (HappyAbsSyn )-happyIn102 x = unsafeCoerce# x-{-# INLINE happyIn102 #-}-happyOut102 :: (HappyAbsSyn ) -> ([HsExp])-happyOut102 x = unsafeCoerce# x-{-# INLINE happyOut102 #-}-happyIn103 :: ([HsExp]) -> (HappyAbsSyn )-happyIn103 x = unsafeCoerce# x-{-# INLINE happyIn103 #-}-happyOut103 :: (HappyAbsSyn ) -> ([HsExp])-happyOut103 x = unsafeCoerce# x-{-# INLINE happyOut103 #-}-happyIn104 :: (HsExp) -> (HappyAbsSyn )-happyIn104 x = unsafeCoerce# x-{-# INLINE happyIn104 #-}-happyOut104 :: (HappyAbsSyn ) -> (HsExp)-happyOut104 x = unsafeCoerce# x-{-# INLINE happyOut104 #-}-happyIn105 :: (HsExp) -> (HappyAbsSyn )-happyIn105 x = unsafeCoerce# x-{-# INLINE happyIn105 #-}-happyOut105 :: (HappyAbsSyn ) -> (HsExp)-happyOut105 x = unsafeCoerce# x-{-# INLINE happyOut105 #-}-happyIn106 :: (HsExp) -> (HappyAbsSyn )-happyIn106 x = unsafeCoerce# x-{-# INLINE happyIn106 #-}-happyOut106 :: (HappyAbsSyn ) -> (HsExp)-happyOut106 x = unsafeCoerce# x-{-# INLINE happyOut106 #-}-happyIn107 :: ([HsExp]) -> (HappyAbsSyn )-happyIn107 x = unsafeCoerce# x-{-# INLINE happyIn107 #-}-happyOut107 :: (HappyAbsSyn ) -> ([HsExp])-happyOut107 x = unsafeCoerce# x-{-# INLINE happyOut107 #-}-happyIn108 :: (HsExp) -> (HappyAbsSyn )-happyIn108 x = unsafeCoerce# x-{-# INLINE happyIn108 #-}-happyOut108 :: (HappyAbsSyn ) -> (HsExp)-happyOut108 x = unsafeCoerce# x-{-# INLINE happyOut108 #-}-happyIn109 :: (HsXName) -> (HappyAbsSyn )-happyIn109 x = unsafeCoerce# x-{-# INLINE happyIn109 #-}-happyOut109 :: (HappyAbsSyn ) -> (HsXName)-happyOut109 x = unsafeCoerce# x-{-# INLINE happyOut109 #-}-happyIn110 :: (String) -> (HappyAbsSyn )-happyIn110 x = unsafeCoerce# x-{-# INLINE happyIn110 #-}-happyOut110 :: (HappyAbsSyn ) -> (String)-happyOut110 x = unsafeCoerce# x-{-# INLINE happyOut110 #-}-happyIn111 :: ([HsXAttr]) -> (HappyAbsSyn )-happyIn111 x = unsafeCoerce# x-{-# INLINE happyIn111 #-}-happyOut111 :: (HappyAbsSyn ) -> ([HsXAttr])-happyOut111 x = unsafeCoerce# x-{-# INLINE happyOut111 #-}-happyIn112 :: (HsXAttr) -> (HappyAbsSyn )-happyIn112 x = unsafeCoerce# x-{-# INLINE happyIn112 #-}-happyOut112 :: (HappyAbsSyn ) -> (HsXAttr)-happyOut112 x = unsafeCoerce# x-{-# INLINE happyOut112 #-}-happyIn113 :: (Maybe HsExp) -> (HappyAbsSyn )-happyIn113 x = unsafeCoerce# x-{-# INLINE happyIn113 #-}-happyOut113 :: (HappyAbsSyn ) -> (Maybe HsExp)-happyOut113 x = unsafeCoerce# x-{-# INLINE happyOut113 #-}-happyIn114 :: (HsExp) -> (HappyAbsSyn )-happyIn114 x = unsafeCoerce# x-{-# INLINE happyIn114 #-}-happyOut114 :: (HappyAbsSyn ) -> (HsExp)-happyOut114 x = unsafeCoerce# x-{-# INLINE happyOut114 #-}-happyIn115 :: (HsExp) -> (HappyAbsSyn )-happyIn115 x = unsafeCoerce# x-{-# INLINE happyIn115 #-}-happyOut115 :: (HappyAbsSyn ) -> (HsExp)-happyOut115 x = unsafeCoerce# x-{-# INLINE happyOut115 #-}-happyIn116 :: ([HsExp]) -> (HappyAbsSyn )-happyIn116 x = unsafeCoerce# x-{-# INLINE happyIn116 #-}-happyOut116 :: (HappyAbsSyn ) -> ([HsExp])-happyOut116 x = unsafeCoerce# x-{-# INLINE happyOut116 #-}-happyIn117 :: ([HsStmt]) -> (HappyAbsSyn )-happyIn117 x = unsafeCoerce# x-{-# INLINE happyIn117 #-}-happyOut117 :: (HappyAbsSyn ) -> ([HsStmt])-happyOut117 x = unsafeCoerce# x-{-# INLINE happyOut117 #-}-happyIn118 :: (HsStmt) -> (HappyAbsSyn )-happyIn118 x = unsafeCoerce# x-{-# INLINE happyIn118 #-}-happyOut118 :: (HappyAbsSyn ) -> (HsStmt)-happyOut118 x = unsafeCoerce# x-{-# INLINE happyOut118 #-}-happyIn119 :: ([HsAlt]) -> (HappyAbsSyn )-happyIn119 x = unsafeCoerce# x-{-# INLINE happyIn119 #-}-happyOut119 :: (HappyAbsSyn ) -> ([HsAlt])-happyOut119 x = unsafeCoerce# x-{-# INLINE happyOut119 #-}-happyIn120 :: ([HsAlt]) -> (HappyAbsSyn )-happyIn120 x = unsafeCoerce# x-{-# INLINE happyIn120 #-}-happyOut120 :: (HappyAbsSyn ) -> ([HsAlt])-happyOut120 x = unsafeCoerce# x-{-# INLINE happyOut120 #-}-happyIn121 :: ([HsAlt]) -> (HappyAbsSyn )-happyIn121 x = unsafeCoerce# x-{-# INLINE happyIn121 #-}-happyOut121 :: (HappyAbsSyn ) -> ([HsAlt])-happyOut121 x = unsafeCoerce# x-{-# INLINE happyOut121 #-}-happyIn122 :: (HsAlt) -> (HappyAbsSyn )-happyIn122 x = unsafeCoerce# x-{-# INLINE happyIn122 #-}-happyOut122 :: (HappyAbsSyn ) -> (HsAlt)-happyOut122 x = unsafeCoerce# x-{-# INLINE happyOut122 #-}-happyIn123 :: (HsGuardedAlts) -> (HappyAbsSyn )-happyIn123 x = unsafeCoerce# x-{-# INLINE happyIn123 #-}-happyOut123 :: (HappyAbsSyn ) -> (HsGuardedAlts)-happyOut123 x = unsafeCoerce# x-{-# INLINE happyOut123 #-}-happyIn124 :: ([HsGuardedAlt]) -> (HappyAbsSyn )-happyIn124 x = unsafeCoerce# x-{-# INLINE happyIn124 #-}-happyOut124 :: (HappyAbsSyn ) -> ([HsGuardedAlt])-happyOut124 x = unsafeCoerce# x-{-# INLINE happyOut124 #-}-happyIn125 :: (HsGuardedAlt) -> (HappyAbsSyn )-happyIn125 x = unsafeCoerce# x-{-# INLINE happyIn125 #-}-happyOut125 :: (HappyAbsSyn ) -> (HsGuardedAlt)-happyOut125 x = unsafeCoerce# x-{-# INLINE happyOut125 #-}-happyIn126 :: (HsPat) -> (HappyAbsSyn )-happyIn126 x = unsafeCoerce# x-{-# INLINE happyIn126 #-}-happyOut126 :: (HappyAbsSyn ) -> (HsPat)-happyOut126 x = unsafeCoerce# x-{-# INLINE happyOut126 #-}-happyIn127 :: ([HsStmt]) -> (HappyAbsSyn )-happyIn127 x = unsafeCoerce# x-{-# INLINE happyIn127 #-}-happyOut127 :: (HappyAbsSyn ) -> ([HsStmt])-happyOut127 x = unsafeCoerce# x-{-# INLINE happyOut127 #-}-happyIn128 :: ([HsStmt]) -> (HappyAbsSyn )-happyIn128 x = unsafeCoerce# x-{-# INLINE happyIn128 #-}-happyOut128 :: (HappyAbsSyn ) -> ([HsStmt])-happyOut128 x = unsafeCoerce# x-{-# INLINE happyOut128 #-}-happyIn129 :: ([HsFieldUpdate]) -> (HappyAbsSyn )-happyIn129 x = unsafeCoerce# x-{-# INLINE happyIn129 #-}-happyOut129 :: (HappyAbsSyn ) -> ([HsFieldUpdate])-happyOut129 x = unsafeCoerce# x-{-# INLINE happyOut129 #-}-happyIn130 :: (HsFieldUpdate) -> (HappyAbsSyn )-happyIn130 x = unsafeCoerce# x-{-# INLINE happyIn130 #-}-happyOut130 :: (HappyAbsSyn ) -> (HsFieldUpdate)-happyOut130 x = unsafeCoerce# x-{-# INLINE happyOut130 #-}-happyIn131 :: ([HsIPBind]) -> (HappyAbsSyn )-happyIn131 x = unsafeCoerce# x-{-# INLINE happyIn131 #-}-happyOut131 :: (HappyAbsSyn ) -> ([HsIPBind])-happyOut131 x = unsafeCoerce# x-{-# INLINE happyOut131 #-}-happyIn132 :: ([HsIPBind]) -> (HappyAbsSyn )-happyIn132 x = unsafeCoerce# x-{-# INLINE happyIn132 #-}-happyOut132 :: (HappyAbsSyn ) -> ([HsIPBind])-happyOut132 x = unsafeCoerce# x-{-# INLINE happyOut132 #-}-happyIn133 :: ([HsIPBind]) -> (HappyAbsSyn )-happyIn133 x = unsafeCoerce# x-{-# INLINE happyIn133 #-}-happyOut133 :: (HappyAbsSyn ) -> ([HsIPBind])-happyOut133 x = unsafeCoerce# x-{-# INLINE happyOut133 #-}-happyIn134 :: (HsIPBind) -> (HappyAbsSyn )-happyIn134 x = unsafeCoerce# x-{-# INLINE happyIn134 #-}-happyOut134 :: (HappyAbsSyn ) -> (HsIPBind)-happyOut134 x = unsafeCoerce# x-{-# INLINE happyOut134 #-}-happyIn135 :: (HsExp) -> (HappyAbsSyn )-happyIn135 x = unsafeCoerce# x-{-# INLINE happyIn135 #-}-happyOut135 :: (HappyAbsSyn ) -> (HsExp)-happyOut135 x = unsafeCoerce# x-{-# INLINE happyOut135 #-}-happyIn136 :: (HsName) -> (HappyAbsSyn )-happyIn136 x = unsafeCoerce# x-{-# INLINE happyIn136 #-}-happyOut136 :: (HappyAbsSyn ) -> (HsName)-happyOut136 x = unsafeCoerce# x-{-# INLINE happyOut136 #-}-happyIn137 :: (HsName) -> (HappyAbsSyn )-happyIn137 x = unsafeCoerce# x-{-# INLINE happyIn137 #-}-happyOut137 :: (HappyAbsSyn ) -> (HsName)-happyOut137 x = unsafeCoerce# x-{-# INLINE happyOut137 #-}-happyIn138 :: (HsQName) -> (HappyAbsSyn )-happyIn138 x = unsafeCoerce# x-{-# INLINE happyIn138 #-}-happyOut138 :: (HappyAbsSyn ) -> (HsQName)-happyOut138 x = unsafeCoerce# x-{-# INLINE happyOut138 #-}-happyIn139 :: (HsIPName) -> (HappyAbsSyn )-happyIn139 x = unsafeCoerce# x-{-# INLINE happyIn139 #-}-happyOut139 :: (HappyAbsSyn ) -> (HsIPName)-happyOut139 x = unsafeCoerce# x-{-# INLINE happyOut139 #-}-happyIn140 :: (HsName) -> (HappyAbsSyn )-happyIn140 x = unsafeCoerce# x-{-# INLINE happyIn140 #-}-happyOut140 :: (HappyAbsSyn ) -> (HsName)-happyOut140 x = unsafeCoerce# x-{-# INLINE happyOut140 #-}-happyIn141 :: (HsQName) -> (HappyAbsSyn )-happyIn141 x = unsafeCoerce# x-{-# INLINE happyIn141 #-}-happyOut141 :: (HappyAbsSyn ) -> (HsQName)-happyOut141 x = unsafeCoerce# x-{-# INLINE happyOut141 #-}-happyIn142 :: (HsName) -> (HappyAbsSyn )-happyIn142 x = unsafeCoerce# x-{-# INLINE happyIn142 #-}-happyOut142 :: (HappyAbsSyn ) -> (HsName)-happyOut142 x = unsafeCoerce# x-{-# INLINE happyOut142 #-}-happyIn143 :: (HsQName) -> (HappyAbsSyn )-happyIn143 x = unsafeCoerce# x-{-# INLINE happyIn143 #-}-happyOut143 :: (HappyAbsSyn ) -> (HsQName)-happyOut143 x = unsafeCoerce# x-{-# INLINE happyOut143 #-}-happyIn144 :: (HsQName) -> (HappyAbsSyn )-happyIn144 x = unsafeCoerce# x-{-# INLINE happyIn144 #-}-happyOut144 :: (HappyAbsSyn ) -> (HsQName)-happyOut144 x = unsafeCoerce# x-{-# INLINE happyOut144 #-}-happyIn145 :: (HsName) -> (HappyAbsSyn )-happyIn145 x = unsafeCoerce# x-{-# INLINE happyIn145 #-}-happyOut145 :: (HappyAbsSyn ) -> (HsName)-happyOut145 x = unsafeCoerce# x-{-# INLINE happyOut145 #-}-happyIn146 :: (HsQName) -> (HappyAbsSyn )-happyIn146 x = unsafeCoerce# x-{-# INLINE happyIn146 #-}-happyOut146 :: (HappyAbsSyn ) -> (HsQName)-happyOut146 x = unsafeCoerce# x-{-# INLINE happyOut146 #-}-happyIn147 :: (HsOp) -> (HappyAbsSyn )-happyIn147 x = unsafeCoerce# x-{-# INLINE happyIn147 #-}-happyOut147 :: (HappyAbsSyn ) -> (HsOp)-happyOut147 x = unsafeCoerce# x-{-# INLINE happyOut147 #-}-happyIn148 :: (HsQOp) -> (HappyAbsSyn )-happyIn148 x = unsafeCoerce# x-{-# INLINE happyIn148 #-}-happyOut148 :: (HappyAbsSyn ) -> (HsQOp)-happyOut148 x = unsafeCoerce# x-{-# INLINE happyOut148 #-}-happyIn149 :: (HsQOp) -> (HappyAbsSyn )-happyIn149 x = unsafeCoerce# x-{-# INLINE happyIn149 #-}-happyOut149 :: (HappyAbsSyn ) -> (HsQOp)-happyOut149 x = unsafeCoerce# x-{-# INLINE happyOut149 #-}-happyIn150 :: (HsQName) -> (HappyAbsSyn )-happyIn150 x = unsafeCoerce# x-{-# INLINE happyIn150 #-}-happyOut150 :: (HappyAbsSyn ) -> (HsQName)-happyOut150 x = unsafeCoerce# x-{-# INLINE happyOut150 #-}-happyIn151 :: (HsQName) -> (HappyAbsSyn )-happyIn151 x = unsafeCoerce# x-{-# INLINE happyIn151 #-}-happyOut151 :: (HappyAbsSyn ) -> (HsQName)-happyOut151 x = unsafeCoerce# x-{-# INLINE happyOut151 #-}-happyIn152 :: (HsName) -> (HappyAbsSyn )-happyIn152 x = unsafeCoerce# x-{-# INLINE happyIn152 #-}-happyOut152 :: (HappyAbsSyn ) -> (HsName)-happyOut152 x = unsafeCoerce# x-{-# INLINE happyOut152 #-}-happyIn153 :: (HsName) -> (HappyAbsSyn )-happyIn153 x = unsafeCoerce# x-{-# INLINE happyIn153 #-}-happyOut153 :: (HappyAbsSyn ) -> (HsName)-happyOut153 x = unsafeCoerce# x-{-# INLINE happyOut153 #-}-happyIn154 :: (HsIPName) -> (HappyAbsSyn )-happyIn154 x = unsafeCoerce# x-{-# INLINE happyIn154 #-}-happyOut154 :: (HappyAbsSyn ) -> (HsIPName)-happyOut154 x = unsafeCoerce# x-{-# INLINE happyOut154 #-}-happyIn155 :: (HsQName) -> (HappyAbsSyn )-happyIn155 x = unsafeCoerce# x-{-# INLINE happyIn155 #-}-happyOut155 :: (HappyAbsSyn ) -> (HsQName)-happyOut155 x = unsafeCoerce# x-{-# INLINE happyOut155 #-}-happyIn156 :: (HsName) -> (HappyAbsSyn )-happyIn156 x = unsafeCoerce# x-{-# INLINE happyIn156 #-}-happyOut156 :: (HappyAbsSyn ) -> (HsName)-happyOut156 x = unsafeCoerce# x-{-# INLINE happyOut156 #-}-happyIn157 :: (HsQName) -> (HappyAbsSyn )-happyIn157 x = unsafeCoerce# x-{-# INLINE happyIn157 #-}-happyOut157 :: (HappyAbsSyn ) -> (HsQName)-happyOut157 x = unsafeCoerce# x-{-# INLINE happyOut157 #-}-happyIn158 :: (HsName) -> (HappyAbsSyn )-happyIn158 x = unsafeCoerce# x-{-# INLINE happyIn158 #-}-happyOut158 :: (HappyAbsSyn ) -> (HsName)-happyOut158 x = unsafeCoerce# x-{-# INLINE happyOut158 #-}-happyIn159 :: (HsQName) -> (HappyAbsSyn )-happyIn159 x = unsafeCoerce# x-{-# INLINE happyIn159 #-}-happyOut159 :: (HappyAbsSyn ) -> (HsQName)-happyOut159 x = unsafeCoerce# x-{-# INLINE happyOut159 #-}-happyIn160 :: (HsQName) -> (HappyAbsSyn )-happyIn160 x = unsafeCoerce# x-{-# INLINE happyIn160 #-}-happyOut160 :: (HappyAbsSyn ) -> (HsQName)-happyOut160 x = unsafeCoerce# x-{-# INLINE happyOut160 #-}-happyIn161 :: (HsName) -> (HappyAbsSyn )-happyIn161 x = unsafeCoerce# x-{-# INLINE happyIn161 #-}-happyOut161 :: (HappyAbsSyn ) -> (HsName)-happyOut161 x = unsafeCoerce# x-{-# INLINE happyOut161 #-}-happyIn162 :: (HsName) -> (HappyAbsSyn )-happyIn162 x = unsafeCoerce# x-{-# INLINE happyIn162 #-}-happyOut162 :: (HappyAbsSyn ) -> (HsName)-happyOut162 x = unsafeCoerce# x-{-# INLINE happyOut162 #-}-happyIn163 :: (HsQName) -> (HappyAbsSyn )-happyIn163 x = unsafeCoerce# x-{-# INLINE happyIn163 #-}-happyOut163 :: (HappyAbsSyn ) -> (HsQName)-happyOut163 x = unsafeCoerce# x-{-# INLINE happyOut163 #-}-happyIn164 :: (HsLiteral) -> (HappyAbsSyn )-happyIn164 x = unsafeCoerce# x-{-# INLINE happyIn164 #-}-happyOut164 :: (HappyAbsSyn ) -> (HsLiteral)-happyOut164 x = unsafeCoerce# x-{-# INLINE happyOut164 #-}-happyIn165 :: (SrcLoc) -> (HappyAbsSyn )-happyIn165 x = unsafeCoerce# x-{-# INLINE happyIn165 #-}-happyOut165 :: (HappyAbsSyn ) -> (SrcLoc)-happyOut165 x = unsafeCoerce# x-{-# INLINE happyOut165 #-}-happyIn166 :: (()) -> (HappyAbsSyn )-happyIn166 x = unsafeCoerce# x-{-# INLINE happyIn166 #-}-happyOut166 :: (HappyAbsSyn ) -> (())-happyOut166 x = unsafeCoerce# x-{-# INLINE happyOut166 #-}-happyIn167 :: (()) -> (HappyAbsSyn )-happyIn167 x = unsafeCoerce# x-{-# INLINE happyIn167 #-}-happyOut167 :: (HappyAbsSyn ) -> (())-happyOut167 x = unsafeCoerce# x-{-# INLINE happyOut167 #-}-happyIn168 :: (Module) -> (HappyAbsSyn )-happyIn168 x = unsafeCoerce# x-{-# INLINE happyIn168 #-}-happyOut168 :: (HappyAbsSyn ) -> (Module)-happyOut168 x = unsafeCoerce# x-{-# INLINE happyOut168 #-}-happyIn169 :: (HsName) -> (HappyAbsSyn )-happyIn169 x = unsafeCoerce# x-{-# INLINE happyIn169 #-}-happyOut169 :: (HappyAbsSyn ) -> (HsName)-happyOut169 x = unsafeCoerce# x-{-# INLINE happyOut169 #-}-happyIn170 :: (HsName) -> (HappyAbsSyn )-happyIn170 x = unsafeCoerce# x-{-# INLINE happyIn170 #-}-happyOut170 :: (HappyAbsSyn ) -> (HsName)-happyOut170 x = unsafeCoerce# x-{-# INLINE happyOut170 #-}-happyIn171 :: (HsQName) -> (HappyAbsSyn )-happyIn171 x = unsafeCoerce# x-{-# INLINE happyIn171 #-}-happyOut171 :: (HappyAbsSyn ) -> (HsQName)-happyOut171 x = unsafeCoerce# x-{-# INLINE happyOut171 #-}-happyIn172 :: (HsQName) -> (HappyAbsSyn )-happyIn172 x = unsafeCoerce# x-{-# INLINE happyIn172 #-}-happyOut172 :: (HappyAbsSyn ) -> (HsQName)-happyOut172 x = unsafeCoerce# x-{-# INLINE happyOut172 #-}-happyIn173 :: (HsName) -> (HappyAbsSyn )-happyIn173 x = unsafeCoerce# x-{-# INLINE happyIn173 #-}-happyOut173 :: (HappyAbsSyn ) -> (HsName)-happyOut173 x = unsafeCoerce# x-{-# INLINE happyOut173 #-}-happyIn174 :: (HsQName) -> (HappyAbsSyn )-happyIn174 x = unsafeCoerce# x-{-# INLINE happyIn174 #-}-happyOut174 :: (HappyAbsSyn ) -> (HsQName)-happyOut174 x = unsafeCoerce# x-{-# INLINE happyOut174 #-}-happyIn175 :: (HsName) -> (HappyAbsSyn )-happyIn175 x = unsafeCoerce# x-{-# INLINE happyIn175 #-}-happyOut175 :: (HappyAbsSyn ) -> (HsName)-happyOut175 x = unsafeCoerce# x-{-# INLINE happyOut175 #-}-happyInTok :: Token -> (HappyAbsSyn )-happyInTok x = unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn ) -> Token-happyOutTok x = unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\xab\x05\x00\x00\x00\x00\xac\x05\x81\x05\x00\x00\xbc\x00\x00\x00\x9e\x05\x7d\x00\x00\x00\x00\x00\x00\x00\xa7\x01\x83\x04\xd4\x05\x00\x00\x00\x00\x00\x00\xc4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x05\x00\x00\x65\x04\x11\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\xf3\x05\x00\x00\x00\x00\xa7\x01\xf9\x10\x79\x05\x00\x00\x1d\x11\xcd\x05\xb6\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x05\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x04\x00\x00\xc8\x05\x00\x00\x9e\x03\x00\x00\x00\x00\xad\x05\x00\x00\x39\x04\x00\x00\xcc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x01\xc0\x01\x00\x00\x00\x00\x7a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\xd7\x09\x00\x00\xea\x11\x0d\x0e\x00\x00\x0d\x0e\x0d\x0e\x0d\x0e\xbd\x13\x00\x00\x0d\x0e\x00\x00\xc0\x05\xf5\x02\x58\x08\x00\x00\x4a\x11\x00\x00\x00\x00\x00\x00\xa3\x01\x00\x00\xea\x11\x0d\x0e\xb2\x14\x86\x14\x86\x14\xf5\x01\x0d\x0e\xbd\x13\xbd\x13\xba\x05\xb1\x05\x55\x05\x00\x00\x00\x00\x00\x00\xbd\x13\xa9\x05\xbd\x13\xb5\x05\x89\x05\xa5\x05\xcf\x04\xa5\x05\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x06\x9c\x05\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x12\x00\x00\x00\x00\x97\x05\x8f\x05\x95\x05\x00\x00\x00\x00\x00\x00\x98\x12\xdf\x13\x90\x13\x00\x00\x00\x00\x75\x09\x75\x09\x45\x05\x75\x04\x00\x00\x00\x00\xdf\x13\xa6\x00\x90\x05\x4c\x05\x00\x00\x00\x00\x0f\x11\x00\x00\x00\x00\x9a\x05\x0d\x0e\x99\x05\x29\x04\x29\x04\x00\x00\x00\x00\x00\x00\x94\x07\x93\x05\x00\x00\x00\x00\x00\x00\xf6\x07\x92\x05\x98\x05\x4a\x11\xea\x11\xea\x11\x00\x00\x40\x05\x83\x05\x00\x00\x00\x00\x00\x00\xa0\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x05\x00\x00\x00\x00\x00\x00\x00\x00\x34\x06\x00\x00\x00\x00\x0d\x0e\x00\x00\x00\x00\xc0\x07\x6d\x13\x51\x02\x00\x00\x5b\x05\x00\x00\x6a\x05\x57\x05\x52\x07\x56\x05\x70\x05\x4b\x05\xb6\x00\x00\x00\x00\x00\x00\x00\x19\x03\x78\x05\x6f\x05\x00\x00\x48\x01\x0f\x11\x32\x03\x23\x03\x6e\x05\x00\x00\x00\x00\x0d\x0e\x6d\x05\x6b\x05\x00\x00\x00\x00\x69\x05\x68\x05\x00\x00\x00\x00\x34\x06\x67\x05\x4a\x11\x66\x05\x0d\x0e\xa7\x01\x00\x00\x00\x00\xea\x11\xdf\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x14\x65\x05\x6d\x11\x00\x00\x00\x00\x00\x00\xd7\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01\x00\x00\x5d\x05\xb7\x02\x00\x00\x4e\x05\x00\x00\x00\x00\xbe\x03\x00\x00\x66\x01\x49\x05\x43\x05\x00\x00\x00\x00\x4d\x05\x00\x00\x00\x00\x0d\x0e\x00\x00\x00\x00\xab\x0d\x00\x00\x48\x05\x00\x00\x49\x0d\x49\x0d\x49\x0d\x00\x00\x49\x0d\x4f\x08\xe7\x0c\x85\x0c\x00\x00\x00\x00\x00\x00\x8c\x0f\x00\x00\x00\x00\x39\x01\x00\x00\x41\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x09\x00\x00\x00\x00\x3b\x02\x00\x00\x3d\x05\x23\x0c\x00\x00\x00\x00\x00\x00\x42\x05\x00\x00\x00\x00\x39\x05\x00\x00\xd6\x02\x00\x00\x3f\x05\x3e\x05\xbb\x01\x00\x00\x00\x00\x41\x12\x00\x00\xf0\x04\x00\x00\x00\x00\xe7\x04\xef\x04\x00\x00\x00\x00\xea\x11\x35\x05\xd8\x04\x00\x00\xe4\x04\x00\x00\x22\x05\x23\x05\x18\x05\xbb\x12\x00\x00\x16\x05\xe6\x04\x00\x00\x12\x05\x17\x05\x8b\x03\x00\x00\x13\x05\x75\x09\x11\x05\x39\x01\xfc\x06\x0b\x05\x00\x00\x0a\x02\x09\x05\x05\x05\x04\x05\x63\x14\xdf\x13\x00\x00\x00\x00\x63\x14\x00\x00\x63\x14\x00\x00\x00\x00\xdb\x08\x63\x14\xbb\x05\x6d\x13\x00\x00\x00\x00\x00\x00\xf8\x04\x00\x00\x00\x00\xbe\x04\xb4\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x13\x00\x00\x6d\x13\x00\x00\x9e\x00\x00\x00\x00\x00\xec\x04\xc7\x06\x00\x00\x00\x00\x0f\x00\x69\x04\xdf\x13\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x04\x00\x00\x00\x00\x55\x03\x97\x04\xea\x04\x00\x00\x00\x00\xe8\x04\x00\x00\x00\x00\x00\x00\x9a\x11\x00\x00\x00\x00\xdf\x04\xe5\x04\x39\x01\xc1\x0b\xc1\x0b\xed\x07\xe3\x04\xe1\x04\x39\x01\x39\x01\xc1\x0b\x00\x00\xd5\x04\x00\x00\x8f\x06\x3b\x02\x41\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x00\x00\x00\x00\xdd\x04\x00\x00\xdc\x04\xd3\x04\xd0\x04\x51\x02\xac\x04\x00\x00\x00\x00\xd1\x04\x00\x00\xbc\x04\x00\x00\xb3\x04\x00\x00\x00\x00\x00\x00\x6d\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x10\x00\x00\x00\x00\xd9\x00\x00\x00\xa7\x01\xc1\x0b\x00\x00\x4b\x15\x00\x00\xc8\x04\x00\x00\x34\x15\x00\x00\x00\x00\x00\x00\x00\x00\x92\x04\xc1\x0b\x1d\x04\x00\x00\x8b\x07\x5f\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x04\xaa\x04\xfd\x0a\x00\x00\xb7\x04\xa6\x04\x63\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x0f\x6a\x04\x00\x00\x00\x00\x00\x00\x5d\x04\x00\x00\xfd\x0a\xa5\x04\x95\x04\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x02\x00\x00\x98\x04\x94\x04\x2b\x00\x8e\x04\x00\x00\x00\x00\x00\x00\x8b\x04\x00\x00\xd1\x0e\x90\x04\x2b\x00\x00\x00\xfd\x0a\x75\x09\x00\x00\x00\x00\x5c\x14\x00\x00\x00\x00\x00\x00\x38\x04\x11\x13\x6f\x04\x00\x00\x00\x00\x36\x14\x3c\x01\x85\x04\x84\x04\x17\x12\x63\x14\x00\x00\x82\x04\x00\x00\x00\x00\x00\x00\x00\x00\x47\x10\xd8\x14\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x02\x00\x00\xb4\x02\x00\x00\x00\x00\xbb\x05\x00\x00\x29\x07\x00\x00\x00\x00\x00\x00\x00\x00\x47\x10\x00\x00\x74\x04\xfd\x0a\x74\x04\x5b\x04\x80\x04\x13\x09\x80\x04\x00\x00\x63\x14\x00\x00\x00\x00\xfd\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x01\x00\x00\x00\x00\xb4\x03\x00\x00\x00\x00\x00\x00\x6f\x0e\x00\x00\xfd\x0a\x00\x00\x52\x07\x6e\x04\xee\x0f\x7b\x04\x00\x00\x55\x04\x6d\x04\x20\x02\x32\x02\x77\x04\x79\x04\x62\x04\x00\x00\x00\x00\x00\x00\x60\x04\xee\x0f\x40\x04\xb1\x08\x00\x00\x51\x05\x0c\x14\x73\x04\x00\x00\x00\x00\x63\x14\xe6\x13\x63\x14\x00\x00\x00\x00\x66\x13\x00\x00\x00\x00\x63\x14\x00\x00\x74\x02\x35\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x12\x15\x04\x07\x15\x00\x00\x00\x00\x40\x13\x00\x00\x00\x00\xd8\x03\x12\x04\x00\x00\x0e\x04\xfd\x0a\x00\x00\xa7\x01\xe3\x03\x00\x00\x9b\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x02\x00\x00\x10\x04\x00\x00\xf2\x14\xe7\x12\x00\x00\x00\x00\x63\x14\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x39\x0a\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x08\x00\x00\x00\x06\x00\x00\x00\x8c\x03\x84\x03\xe1\x03\x78\x03\x4f\x04\x00\x00\x00\x00\xb8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x56\x03\x77\x03\x03\x00\x00\x00\x00\x00\x00\x00\x43\x04\x00\x00\x00\x00\x00\x00\xb9\x03\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x7c\x03\xea\x17\x00\x00\x00\x00\x07\x00\x00\x00\xda\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\x4c\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x03\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x15\xfd\x18\x00\x00\xeb\x1f\xae\x16\x00\x00\xfa\x1d\xb4\x1d\x5c\x1e\x49\x02\x3e\x03\x98\x1d\x00\x00\xc5\x03\x00\x00\xb1\x0e\x00\x00\xb8\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x16\x52\x1d\x83\x02\x8a\x05\x6b\x04\x00\x00\x36\x1d\x33\x02\x1d\x02\x00\x00\xb8\x00\xac\x03\x00\x00\x00\x00\x00\x00\x06\x02\x9d\x00\xea\x01\xdb\xff\x4f\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x00\x00\x00\x7e\x03\x00\x00\x00\x00\xb6\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x01\x5f\x02\x97\x02\x75\x03\x00\x00\xb7\x18\x71\x18\x5b\x03\xff\x02\x00\x00\x00\x00\x26\x00\x5f\x03\x46\x03\x00\x00\x00\x00\x00\x00\x8e\x0a\x00\x00\xd1\x02\xc0\xff\xf0\x1c\x45\x00\x58\x03\x42\x03\x00\x00\x00\x00\x00\x00\x61\x03\x00\x00\x00\x00\x00\x00\x00\x00\x45\x01\x00\x00\x00\x00\xb8\x1f\xa2\x1f\x6f\x1f\x00\x00\x20\x03\xce\xff\x00\x00\x00\x00\x00\x00\x10\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x03\x00\x00\x00\x00\xd4\x1c\x00\x00\x00\x00\x6a\x02\xd4\x01\xf1\xff\x00\x00\x00\x00\xf8\xff\x00\x00\x00\x00\x8e\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x03\x00\x00\xd2\x16\x00\x00\x92\x16\x6f\x03\xfb\x02\x00\x00\x59\x1f\xb1\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x01\xee\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x1c\x00\x00\x00\x00\xdd\x1e\xb1\x02\xbe\xff\x00\x00\x72\x1c\x1c\x19\x2c\x1c\x00\x00\x10\x1c\xca\x1b\x4c\x16\x52\x18\x00\x00\x00\x00\x00\x00\xdd\x1e\x00\x00\x00\x00\xb3\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x02\x00\x00\x00\x00\x99\x02\x00\x00\x00\x00\x06\x16\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x02\x00\x00\x00\x00\x49\x00\x00\x00\x00\x00\x35\x00\x2f\x00\x00\x00\x00\x00\x65\x00\x56\x00\xa4\x17\xa7\xff\xa5\x02\xb6\x03\xa2\x02\x87\x00\xd5\xff\x00\x00\x00\x00\xb6\x02\x00\x00\x00\x00\xc5\x02\x00\x00\x30\x02\x00\x00\xca\x09\x2e\x02\x00\x00\x0c\x18\x21\x00\x13\x02\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x02\x92\x02\x6c\x00\x00\x00\xcf\x02\x00\x00\xc0\x02\x00\x00\x00\x00\x2c\x03\xaa\x02\xdb\x01\xbe\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x02\xad\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x02\x00\x00\xa5\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x17\x79\x01\x47\x01\x65\x03\xbd\x01\x76\x02\x00\x00\x00\x00\xe9\x00\x24\x00\x00\x00\x00\x00\x00\x00\xef\x01\xdb\x01\x00\x00\x00\x00\x00\x00\xf4\xff\x00\x00\x77\x00\x68\x00\x26\x1f\x00\x00\x00\x00\x29\x01\x00\x00\x0b\x02\xae\x1b\x68\x1b\x3e\x00\x00\x00\x00\x00\x08\x02\x87\x01\x4c\x1b\x00\x00\x00\x00\x00\x00\xfe\x01\x5c\x01\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x01\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x17\x00\x00\x00\x00\x00\x00\x00\x00\x35\x03\x06\x1b\x00\x00\x92\x01\x00\x00\x00\x00\x00\x00\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x15\x00\x00\x00\x00\xea\x1a\x80\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x1a\x00\x00\x00\x00\x00\x00\x2a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x03\x00\x00\xa7\x03\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x01\x00\x00\x88\x1a\x0c\x01\x00\x00\xe0\x00\x00\x00\xd2\x01\xc6\x01\x07\x01\x31\x01\x00\x00\x00\x00\xcc\x00\x36\x00\xe2\xff\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x53\x00\x00\x00\x42\x1a\x3a\x17\x00\x00\x00\x00\x05\x03\x4b\x00\x00\x00\x00\x00\xdb\x01\x5a\x03\x00\x00\x00\x00\x00\x00\x01\x02\x49\x01\x00\x00\x00\x00\x00\x01\x4d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x92\x03\x00\x00\xc1\x1e\x1c\x00\x00\x00\x00\x00\x7f\x03\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x01\x00\x00\x27\x00\x00\x00\x00\x00\x1c\x03\x00\x00\x7b\x1e\x00\x00\x00\x00\x26\x1a\x00\x00\x48\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x1b\x01\x00\x00\x00\x00\xe0\x19\x00\x00\x00\x00\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x06\x01\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\xc4\x19\x00\x00\x99\x03\x4f\x01\xab\xff\x00\x00\x00\x00\xa9\x01\x00\x00\x67\x02\xe3\xff\x00\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\xf4\x16\x00\x00\x37\x03\x0d\x03\x8c\xff\x00\x00\x00\x00\x47\x03\x3f\x03\x31\x03\x00\x00\x00\x00\xf7\x02\x00\x00\x00\x00\xf7\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\xf2\xff\x00\x00\x00\x00\x75\x01\x00\x00\x00\x00\xed\xff\x50\x00\x00\x00\x00\x00\x7e\x19\x00\x00\x26\x02\x00\x00\x00\x00\xa1\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x00\x46\x01\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x19\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\x6f\xfe\x00\x00\xfe\xff\x00\x00\x00\x00\xfc\xff\x6e\xfe\x6f\xfe\x00\x00\x6e\xfe\xf8\xff\xef\xff\xef\xff\x00\x00\x00\x00\xed\xff\x6b\xfe\x6a\xfe\xe5\xfe\xec\xfe\xeb\xfe\xea\xfe\xe9\xfe\xe7\xfe\xe8\xfe\x00\x00\xf0\xff\xf2\xff\x00\x00\x6f\xfe\x6f\xfe\xf6\xff\x6c\xfe\x6d\xfe\xef\xff\xdf\xff\xaa\xff\xf4\xff\xef\xff\xbe\xff\xb3\xff\xab\xff\xa9\xff\x6f\xfe\xf1\xff\xf7\xff\x00\x00\x6f\xfe\x00\x00\xee\xff\xe9\xff\x00\x00\xe9\xff\xe7\xff\xe6\xff\xad\xfe\x8b\xfe\x94\xfe\x67\xfe\x85\xfe\xe5\xff\x92\xfe\x93\xfe\x83\xfe\x84\xfe\x00\x00\xea\xff\x8e\xfe\x8a\xfe\x89\xfe\x88\xfe\x8d\xfe\x8c\xfe\x91\xfe\x8f\xfe\x00\x00\x90\xfe\x6e\xfe\xe3\xfe\x23\xff\x1a\xff\x0c\xff\x00\x00\xe6\xfe\x00\x00\x17\xff\x18\xff\x19\xff\xb2\xfe\xab\xfe\xa8\xfe\x16\xff\x00\x00\x92\xfe\x87\xfe\x86\xfe\x83\xfe\x73\xfe\x71\xfe\x72\xfe\x70\xfe\x6f\xfe\x6f\xfe\x10\xff\x6f\xfe\x6f\xfe\x0b\xff\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6e\xfe\x6f\xfe\xed\xfe\xc7\xff\x00\x00\x6f\xfe\x36\xff\x2c\xff\x2a\xff\x2d\xff\x37\xff\x18\xff\xe1\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x6e\xfe\xdc\xff\xc5\xff\xc4\xff\xc3\xff\x00\x00\x6e\xfe\x00\x00\x00\x00\xf0\xff\xc0\xff\xf0\xff\xf3\xff\xfd\xff\xe0\xff\xf5\xff\xbf\xff\x6f\xfe\x00\x00\x68\xfe\x7b\xff\x93\xff\x82\xff\x98\xff\x91\xff\x90\xff\x00\x00\x00\x00\x00\x00\x65\xfe\x8a\xff\x8f\xff\x00\x00\x00\x00\x00\x00\x7b\xff\x2e\xff\x6f\xfe\x6f\xfe\x4c\xff\x00\x00\xdd\xff\x2f\xff\xb0\xff\x6f\xff\x7a\xff\x00\x00\x3d\xff\x3c\xff\x3b\xff\x39\xff\x6f\xfe\x6e\xfe\x6f\xfe\x6e\xfe\x00\x00\x00\x00\x02\xff\x00\xff\x01\xff\x00\x00\x00\x00\x03\xff\x05\xff\x04\xff\x00\x00\x00\x00\x00\x00\x30\xff\x6f\xfe\x6f\xfe\x2b\xff\x45\xff\x43\xff\x41\xff\x9a\xfe\x99\xfe\x6f\xfe\x9e\xfe\x95\xfe\x82\xfe\xa4\xfe\x7f\xfe\x7e\xfe\x00\x00\x7b\xfe\x80\xfe\x74\xfe\x81\xfe\x00\x00\x78\xfe\x96\xfe\x6f\xfe\x7a\xfe\x79\xfe\x00\x00\x00\x00\x00\x00\xc6\xff\x00\x00\x6f\xfe\x00\x00\x00\x00\x3b\xff\x00\x00\x00\x00\xf8\xfe\x00\x00\xfa\xfe\xf9\xfe\x24\xff\xe0\xfe\x00\x00\xdf\xfe\xb4\xfe\x00\x00\x3b\xff\x00\x00\x00\x00\x00\x00\x98\xfe\x97\xfe\x6f\xfe\x9e\xfe\x00\x00\xa2\xfe\x7d\xfe\x7c\xfe\x77\xfe\xb5\xfe\xfe\xfe\x00\x00\x75\xfe\x7a\xfe\x76\xfe\x6f\xfe\x00\x00\xf1\xfe\xfa\xff\x6f\xfe\x00\x00\x20\xff\x1f\xff\x1e\xff\x1d\xff\x1c\xff\x1b\xff\xf9\xff\xe1\xff\x00\x00\x00\x00\xea\xff\xeb\xff\xe8\xff\xec\xff\x00\x00\xcb\xff\xca\xff\xc9\xff\xb1\xfe\xaa\xfe\x00\x00\xe3\xff\x00\x00\x00\x00\xbd\xfe\x00\x00\x22\xff\xe4\xfe\x6f\xfe\xe5\xfe\x00\x00\x00\x00\x00\x00\xac\xfe\xa7\xfe\x00\x00\x0f\xff\x14\xff\x6f\xfe\xb3\xfe\xff\xfe\x6f\xfe\x6f\xfe\x6e\xfe\x15\xff\x6f\xfe\x6f\xfe\x6f\xfe\x13\xff\x6f\xfe\xde\xfe\x6f\xfe\x6f\xfe\x0e\xff\x0a\xff\x09\xff\x6f\xfe\x08\xff\x07\xff\x00\x00\xf3\xfe\xc8\xff\x9c\xfe\x9b\xfe\xc1\xff\xa0\xfe\xa6\xfe\x00\x00\xa6\xff\xa2\xff\x00\x00\x44\xff\x00\x00\x6f\xfe\x38\xff\x42\xff\x47\xff\x6e\xfe\x25\xff\x26\xff\xb6\xff\x87\xff\x00\x00\x89\xff\x00\x00\x00\x00\x9b\xff\xa0\xff\x9f\xff\x00\x00\xa5\xff\x00\x00\xef\xff\xef\xff\x00\x00\x00\x00\xef\xff\xef\xff\x6f\xfe\x6e\xfe\x4f\xff\x7b\xff\x56\xff\x6f\xfe\x6e\xfe\x00\x00\xb1\xff\x98\xff\xb2\xff\x00\x00\xda\xff\xb8\xff\x6e\xfe\xbf\xfe\x3b\xff\x6f\xfe\x00\x00\x6f\xfe\x6e\xfe\x00\x00\x00\x00\x00\x00\x7f\xff\x00\x00\x82\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x92\xff\x00\x00\x85\xff\x00\x00\x63\xfe\x62\xfe\x00\x00\x00\x00\x7d\xff\x00\x00\xbd\xff\x7c\xff\x95\xff\x00\x00\x96\xff\x97\xff\x56\xff\x68\xff\x83\xff\x94\xff\x8e\xff\x8b\xff\x8d\xff\x00\x00\x8c\xff\x00\x00\xc5\xfe\x00\x00\xc1\xfe\xc6\xfe\x00\x00\xc0\xfe\xef\xff\xef\xff\xd8\xff\x00\x00\x00\x00\xb7\xff\xbb\xff\xef\xff\xef\xff\x6e\xff\x6c\xff\xbc\xff\x00\x00\x00\x00\x79\xff\x77\xff\xb9\xff\x6e\xfe\x31\xff\xef\xff\xef\xff\x6f\xfe\x28\xff\x27\xff\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x6f\xfe\xae\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\xb4\xff\x00\x00\xaf\xfe\x00\x00\x00\x00\x00\x00\x9e\xff\x9d\xff\x9c\xff\x88\xff\x86\xff\x46\xff\xd4\xfe\x00\x00\xd6\xfe\x6f\xfe\x6e\xfe\xa3\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\xff\xfb\xfe\xda\xfe\xdc\xfe\xd8\xfe\xd9\xfe\xf6\xfe\xf7\xfe\xfc\xfe\x3e\xff\x00\x00\x12\xff\xfd\xfe\x11\xff\x9d\xfe\xa1\xfe\x0d\xff\x6f\xfe\xee\xfe\xf2\xfe\x00\x00\xf0\xfe\x00\x00\x6f\xfe\x21\xff\x00\x00\xe4\xff\x00\x00\xe2\xff\x00\x00\xcc\xff\xa9\xfe\xbe\xfe\xbc\xfe\x00\x00\x6f\xfe\x00\x00\x3f\xff\xdd\xfe\x6f\xfe\x06\xff\xc2\xff\x9f\xfe\xa5\xfe\xb0\xfe\xd3\xfe\x00\x00\x6f\xfe\xb5\xff\x00\x00\x00\x00\x00\x00\x34\xff\xa3\xff\xa7\xff\xa4\xff\xa8\xff\xef\xff\xac\xff\xef\xff\xb7\xfe\x6f\xfe\x00\x00\x33\xff\xba\xfe\xbb\xfe\x00\x00\x29\xff\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x50\xff\xef\xff\xef\xff\x7b\xff\x7b\xff\x66\xfe\x55\xff\x00\x00\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x80\xff\xdb\xff\xde\xff\xd9\xff\x00\x00\xd5\xff\x4a\xff\x00\x00\x00\x00\xc2\xfe\x6f\xfe\x6f\xfe\x84\xff\x7e\xff\x00\x00\x7b\xff\xba\xff\x64\xfe\x00\x00\x63\xff\x00\x00\x6a\xff\x67\xff\x62\xff\x00\x00\x00\x00\x85\xfe\x00\x00\x00\x00\xc4\xfe\x00\x00\x4d\xff\x4e\xff\xef\xff\x48\xff\x6f\xfe\xe9\xff\x74\xff\x75\xff\xef\xff\x71\xff\x00\x00\x6d\xff\x00\x00\x51\xff\x54\xff\x76\xff\x78\xff\xae\xff\xd1\xfe\xd2\xfe\xef\xff\xce\xfe\x6f\xfe\x35\xff\x00\x00\x6f\xfe\x19\xff\xf0\xff\xb9\xfe\xf0\xff\xaf\xff\x99\xff\x00\x00\xae\xfe\x40\xff\x6f\xfe\xd7\xfe\xdb\xfe\xf1\xfe\xf4\xfe\x00\x00\xfb\xff\xef\xfe\x6f\xfe\xd5\xfe\x9a\xff\xad\xff\x6f\xfe\xb8\xfe\x6f\xfe\x32\xff\xc7\xfe\x6f\xfe\xf0\xff\xd0\xfe\x53\xff\x00\x00\x00\x00\x00\x00\xf0\xff\x73\xff\x00\x00\xe9\xff\xd2\xff\xd1\xff\x69\xfe\xd0\xff\xf0\xff\x4b\xff\x6f\xfe\x5c\xff\x00\x00\x00\x00\x00\x00\x5f\xff\x60\xff\x00\x00\x00\x00\x00\x00\x69\xff\x61\xff\x63\xff\x6b\xff\x5e\xff\x5d\xff\x66\xff\x00\x00\x00\x00\x5a\xff\xa1\xff\x65\xff\xc3\xfe\x49\xff\x00\x00\x00\x00\xea\xff\xd6\xff\x72\xff\x00\x00\x52\xff\xcf\xfe\x45\xff\xcb\xfe\xc9\xfe\x00\x00\x6f\xfe\xb6\xfe\x00\x00\x00\x00\xcc\xfe\x6f\xfe\xca\xfe\xcd\xfe\x70\xff\xd3\xff\xd7\xff\x00\x00\xce\xff\x00\x00\x64\xff\x00\x00\x00\x00\x58\xff\x59\xff\x00\x00\x5b\xff\xcf\xff\xcd\xff\x00\x00\xf5\xfe\x6f\xfe\x57\xff\xc8\xfe"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x00\x00\x01\x00\x02\x00\x01\x00\x01\x00\x14\x00\x0b\x00\x03\x00\x03\x00\x02\x00\x1a\x00\x03\x00\x38\x00\x33\x00\x17\x00\x09\x00\x0a\x00\x0b\x00\x1b\x00\x1c\x00\x1d\x00\x22\x00\x0c\x00\x0d\x00\x21\x00\x73\x00\x23\x00\x3a\x00\x3b\x00\x3b\x00\x10\x00\x52\x00\x76\x00\x17\x00\x0d\x00\x98\x00\x09\x00\x1b\x00\x1c\x00\x1d\x00\x05\x00\x06\x00\x00\x00\x21\x00\x17\x00\x23\x00\x13\x00\x14\x00\x1b\x00\x1c\x00\x1d\x00\x05\x00\x06\x00\x22\x00\x21\x00\x24\x00\x23\x00\x05\x00\x06\x00\x4f\x00\x7f\x00\x17\x00\x7f\x00\x09\x00\x17\x00\x17\x00\x22\x00\x1e\x00\x24\x00\x4e\x00\x20\x00\x21\x00\xa2\x00\x23\x00\x21\x00\xa1\x00\x23\x00\x1f\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x1f\x00\x17\x00\x28\x00\x31\x00\x32\x00\x4e\x00\x67\x00\x05\x00\x06\x00\x39\x00\x20\x00\x21\x00\xa2\x00\x23\x00\xa2\x00\x22\x00\x4e\x00\x24\x00\x17\x00\x22\x00\x59\x00\x24\x00\x05\x00\x06\x00\x1d\x00\x05\x00\x06\x00\xa1\x00\x21\x00\x28\x00\x23\x00\x98\x00\x3e\x00\x4e\x00\x84\x00\xa2\x00\x4e\x00\x15\x00\x16\x00\x8a\x00\x05\x00\x06\x00\x8d\x00\x34\x00\x8f\x00\xa6\x00\x86\x00\xa1\x00\xa1\x00\x25\x00\x94\x00\x95\x00\x15\x00\x16\x00\x98\x00\x9a\x00\x4e\x00\x86\x00\x9d\x00\x93\x00\x94\x00\x95\x00\x15\x00\x97\x00\x98\x00\x19\x00\xa2\x00\xa5\x00\x16\x00\xa1\x00\x93\x00\x94\x00\x95\x00\x4e\x00\x97\x00\x98\x00\x84\x00\x25\x00\xa1\x00\xa7\x00\xa1\x00\xa1\x00\x46\x00\xa2\x00\xa2\x00\xa1\x00\x3e\x00\xa2\x00\xa1\x00\x87\x00\xa7\x00\x80\x00\x94\x00\x95\x00\x14\x00\x85\x00\x98\x00\x80\x00\xa2\x00\xa1\x00\x4d\x00\x4e\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x81\x00\x82\x00\xa5\x00\x94\x00\xa2\x00\x3d\x00\x3e\x00\x4e\x00\x21\x00\xa1\x00\x79\x00\x82\x00\xa1\x00\x2c\x00\x2d\x00\x85\x00\xa9\x00\x1a\x00\x15\x00\x56\x00\x1a\x00\x58\x00\x59\x00\x80\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x74\x00\x94\x00\x25\x00\xa1\x00\x63\x00\x19\x00\x66\x00\xa2\x00\x2e\x00\x80\x00\x86\x00\xa2\x00\x84\x00\xa1\x00\x6e\x00\x74\x00\x88\x00\x25\x00\x05\x00\x06\x00\xa1\x00\xa1\x00\x89\x00\x93\x00\x94\x00\x95\x00\xa3\x00\x84\x00\x94\x00\x95\x00\x5c\x00\x88\x00\x98\x00\x19\x00\x42\x00\x83\x00\x97\x00\x98\x00\x86\x00\x87\x00\x2b\x00\x89\x00\x84\x00\x94\x00\x95\x00\x25\x00\x88\x00\x98\x00\xa1\x00\xa1\x00\x68\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x49\x00\x94\x00\x95\x00\x7b\x00\xa1\x00\x98\x00\x42\x00\xa0\x00\xa1\x00\x56\x00\x63\x00\x58\x00\x59\x00\x39\x00\xa3\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xa1\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x66\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x7b\x00\x94\x00\x95\x00\x6e\x00\x97\x00\x98\x00\x00\x00\x56\x00\x34\x00\x58\x00\x59\x00\x37\x00\xa2\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x29\x00\x09\x00\x2b\x00\x2c\x00\x2d\x00\xa9\x00\x66\x00\x83\x00\x05\x00\x06\x00\x86\x00\x87\x00\x17\x00\x89\x00\x6e\x00\x29\x00\x1a\x00\x2b\x00\x2c\x00\x2d\x00\x1c\x00\x11\x00\xa2\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x61\x00\x1a\x00\x97\x00\x98\x00\x34\x00\x2c\x00\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\x66\x00\x89\x00\x68\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xa8\x00\x2f\x00\x30\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x35\x00\x05\x00\x06\x00\x1a\x00\x75\x00\x76\x00\xa3\x00\xa0\x00\xa1\x00\x2b\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x47\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x2c\x00\x4c\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x1f\x00\x9a\x00\x21\x00\x1a\x00\x42\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x21\x00\x2f\x00\x30\x00\x61\x00\xa1\x00\x01\x00\xa9\x00\x81\x00\x82\x00\x05\x00\xa1\x00\x07\x00\x94\x00\x95\x00\xa1\x00\x97\x00\x98\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x9a\x00\x2f\x00\x30\x00\x9d\x00\x1a\x00\x94\x00\x95\x00\x61\x00\x97\x00\x98\x00\x20\x00\xa9\x00\x4c\x00\x77\x00\x78\x00\x79\x00\x26\x00\xa1\x00\x05\x00\x06\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xa9\x00\x2f\x00\x30\x00\x8d\x00\x05\x00\x06\x00\x36\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x1f\x00\x9b\x00\x21\x00\x9d\x00\x9a\x00\x9f\x00\x1f\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x3f\x00\x2f\x00\x30\x00\xa9\x00\xa1\x00\x1f\x00\x26\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x51\x00\x9d\x00\x08\x00\x09\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x36\x00\x2f\x00\x30\x00\x4a\x00\x4b\x00\x4c\x00\xa9\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x67\x00\x1d\x00\x7e\x00\x00\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x86\x00\x2f\x00\x30\x00\x29\x00\x2a\x00\x13\x00\xa9\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x1a\x00\x93\x00\x94\x00\x95\x00\x17\x00\x09\x00\xa3\x00\x0b\x00\x87\x00\x2c\x00\x2d\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xa9\x00\x2f\x00\x30\x00\x05\x00\x06\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x49\x00\x1f\x00\x97\x00\x98\x00\x10\x00\x08\x00\x43\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x16\x00\x2f\x00\x30\x00\xa9\x00\x1a\x00\x5b\x00\xa8\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x87\x00\x1d\x00\x08\x00\x09\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xa4\x00\x2f\x00\x30\x00\x29\x00\x2a\x00\x96\x00\xa9\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x1c\x00\x1d\x00\x94\x00\x95\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x48\x00\x2f\x00\x30\x00\x29\x00\x2a\x00\x11\x00\xa9\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x85\x00\xa9\x00\x1a\x00\x97\x00\x98\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x87\x00\x1a\x00\x69\x00\x6a\x00\x32\x00\x94\x00\xa9\x00\x20\x00\x94\x00\x95\x00\xa8\x00\x97\x00\x98\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xa9\x00\xa3\x00\x05\x00\x06\x00\xa3\x00\xa9\x00\x2d\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xa3\x00\x08\x00\x11\x00\x0a\x00\x87\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x11\x00\xa9\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x1d\x00\x16\x00\x1a\x00\xa1\x00\x87\x00\x1a\x00\xa2\x00\x29\x00\x0f\x00\x2b\x00\x2c\x00\x2d\x00\x29\x00\x2a\x00\x05\x00\x06\x00\xa9\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x2c\x00\x2d\x00\x2e\x00\x10\x00\x87\x00\x11\x00\x11\x00\x29\x00\x48\x00\x2b\x00\x2c\x00\x2d\x00\x84\x00\x4a\x00\x1a\x00\x1a\x00\xa9\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x29\x00\x92\x00\x2b\x00\x2c\x00\x2d\x00\x87\x00\x94\x00\x95\x00\x99\x00\x9a\x00\x29\x00\x87\x00\x2b\x00\x2c\x00\x2d\x00\x27\x00\xa9\x00\x86\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x1a\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x20\x00\x93\x00\x94\x00\x95\x00\x87\x00\x97\x00\x98\x00\x94\x00\x95\x00\x87\x00\xa9\x00\x98\x00\x05\x00\x06\x00\x2c\x00\x2d\x00\xa9\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x2b\x00\x2c\x00\x2d\x00\x1a\x00\x11\x00\x30\x00\x9d\x00\x1e\x00\x2b\x00\x2c\x00\x2d\x00\xa9\x00\x23\x00\x1a\x00\x94\x00\x95\x00\xa9\x00\x97\x00\x98\x00\x11\x00\x8e\x00\x40\x00\x41\x00\x42\x00\x92\x00\x44\x00\x94\x00\x95\x00\x1a\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x44\x00\xa1\x00\xa9\x00\x94\x00\x95\x00\xa3\x00\x97\x00\x98\x00\x6b\x00\x05\x00\x06\x00\x25\x00\x2c\x00\x2d\x00\xa9\x00\xaa\x00\xab\x00\x67\x00\x94\x00\x95\x00\x10\x00\x97\x00\x98\x00\x26\x00\xa9\x00\x2b\x00\x2c\x00\x2d\x00\x94\x00\x95\x00\x4f\x00\x97\x00\x98\x00\xa1\x00\x2c\x00\x2d\x00\x10\x00\x11\x00\x12\x00\xa9\x00\x2c\x00\x2d\x00\x35\x00\x45\x00\x46\x00\x26\x00\x40\x00\x41\x00\x42\x00\xa9\x00\x44\x00\x05\x00\x06\x00\x2c\x00\x2d\x00\x04\x00\x05\x00\x06\x00\x94\x00\x95\x00\x88\x00\x97\x00\x98\x00\x04\x00\x05\x00\x06\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x05\x00\x06\x00\x94\x00\x95\x00\x3c\x00\x97\x00\x98\x00\x69\x00\x6a\x00\xa9\x00\x94\x00\x95\x00\xa4\x00\x97\x00\x98\x00\x4b\x00\x1c\x00\x1d\x00\x34\x00\x1f\x00\x20\x00\x05\x00\x06\x00\xa9\x00\x24\x00\x05\x00\x06\x00\x34\x00\x15\x00\x29\x00\x2a\x00\xa9\x00\x93\x00\x94\x00\x95\x00\x0e\x00\x97\x00\x98\x00\x86\x00\x05\x00\x06\x00\x94\x00\x95\x00\x61\x00\x97\x00\x98\x00\x94\x00\x95\x00\x88\x00\x97\x00\x98\x00\x93\x00\x94\x00\x95\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x94\x00\x95\x00\xa9\x00\x97\x00\x98\x00\x69\x00\x6a\x00\xa9\x00\x94\x00\x95\x00\x18\x00\x97\x00\x98\x00\xa2\x00\x94\x00\x95\x00\x09\x00\x97\x00\x98\x00\x6a\x00\x9b\x00\xa9\x00\x9d\x00\x34\x00\x9f\x00\x36\x00\x37\x00\x94\x00\x95\x00\xa9\x00\x97\x00\x98\x00\x92\x00\x69\x00\x41\x00\xa9\x00\x43\x00\x44\x00\xa3\x00\x99\x00\x9a\x00\x9b\x00\xa4\x00\x9d\x00\x41\x00\x9f\x00\x43\x00\x44\x00\xa9\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\x93\x00\x94\x00\x95\x00\xa1\x00\x97\x00\x98\x00\x18\x00\xa4\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x11\x00\x1f\x00\x6b\x00\x8b\x00\x22\x00\x11\x00\x8e\x00\x45\x00\x90\x00\x27\x00\x92\x00\x29\x00\x2a\x00\x7d\x00\x7e\x00\x2d\x00\x23\x00\x99\x00\x9a\x00\x9b\x00\x23\x00\x9d\x00\x86\x00\x9f\x00\x01\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x68\x00\x3e\x00\x3f\x00\x40\x00\x93\x00\x94\x00\x95\x00\x44\x00\x05\x00\x06\x00\x69\x00\x6a\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x14\x00\x1d\x00\x07\x00\x08\x00\x55\x00\x56\x00\x05\x00\x06\x00\x59\x00\x5a\x00\x03\x00\x04\x00\x03\x00\x04\x00\x45\x00\x46\x00\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\x05\x00\x06\x00\x10\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x4d\x00\x4e\x00\x05\x00\x14\x00\x05\x00\x06\x00\x1a\x00\x18\x00\x45\x00\x46\x00\x1b\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x05\x00\x06\x00\x11\x00\x14\x00\x27\x00\x20\x00\x29\x00\x14\x00\x2b\x00\x59\x00\x2d\x00\x25\x00\x14\x00\x21\x00\x14\x00\x28\x00\x01\x00\x15\x00\x15\x00\x10\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x6a\x00\x3e\x00\x3f\x00\x40\x00\x16\x00\x42\x00\x1a\x00\x44\x00\x16\x00\x16\x00\x14\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\x14\x00\x8a\x00\x56\x00\x25\x00\x8d\x00\x59\x00\x8f\x00\x5b\x00\x57\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x20\x00\x62\x00\x11\x00\x64\x00\x9a\x00\x60\x00\x67\x00\x9d\x00\x24\x00\x6a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x45\x00\x5c\x00\x11\x00\x1e\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x18\x00\x35\x00\x3d\x00\x1b\x00\x1a\x00\x1c\x00\x11\x00\x83\x00\x1c\x00\x59\x00\x86\x00\x15\x00\x14\x00\x89\x00\x20\x00\x27\x00\x16\x00\x29\x00\x16\x00\x2b\x00\x16\x00\x2d\x00\x15\x00\x93\x00\x94\x00\x95\x00\x6a\x00\x97\x00\x98\x00\x1a\x00\x23\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x58\x00\x3e\x00\x3f\x00\x40\x00\x24\x00\x42\x00\x54\x00\x44\x00\x1c\x00\x11\x00\x11\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\x1a\x00\x19\x00\x56\x00\x15\x00\x15\x00\x59\x00\x16\x00\x5b\x00\x14\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x1a\x00\x62\x00\x1a\x00\x64\x00\x11\x00\x4f\x00\x67\x00\x15\x00\x54\x00\x6a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x68\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x15\x00\x5c\x00\x5c\x00\x66\x00\x15\x00\x11\x00\x11\x00\x18\x00\x01\x00\x02\x00\x1b\x00\x1c\x00\x1d\x00\x15\x00\x1f\x00\x1c\x00\x21\x00\x1a\x00\x23\x00\x15\x00\x11\x00\x1c\x00\x27\x00\x10\x00\x29\x00\x2a\x00\x2b\x00\x1c\x00\x2d\x00\x16\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x11\x00\x21\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x42\x00\x11\x00\x44\x00\x11\x00\x11\x00\x35\x00\x11\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x1a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x19\x00\x59\x00\x3d\x00\x3d\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x18\x00\x47\x00\x6a\x00\x1b\x00\x23\x00\x23\x00\x3d\x00\x68\x00\x11\x00\x59\x00\x19\x00\x19\x00\x68\x00\x15\x00\x15\x00\x27\x00\x65\x00\x29\x00\x23\x00\x2b\x00\x20\x00\x2d\x00\x28\x00\x21\x00\x14\x00\x05\x00\x6a\x00\x01\x00\x21\x00\x15\x00\x6a\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x15\x00\x3e\x00\x3f\x00\x40\x00\x10\x00\x42\x00\x0c\x00\x44\x00\x21\x00\x10\x00\x1a\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\x15\x00\x11\x00\x56\x00\x16\x00\x68\x00\x59\x00\x1f\x00\x10\x00\x47\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x60\x00\x62\x00\x6b\x00\x64\x00\x42\x00\x44\x00\x67\x00\xff\xff\xff\xff\x6a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x18\x00\xff\xff\x83\x00\x1b\x00\xff\xff\x86\x00\xff\xff\xff\xff\x89\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\x93\x00\x94\x00\x95\x00\x2d\x00\x97\x00\x98\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\x01\x00\x02\x00\x44\x00\xff\xff\x05\x00\x06\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\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\xff\xff\x5b\x00\xff\xff\x5d\x00\x5e\x00\x5f\x00\x60\x00\xff\xff\x62\x00\xff\xff\x64\x00\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\x6a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\x6a\x00\x10\x00\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\x5d\x00\x5e\x00\x5f\x00\x60\x00\xff\xff\x62\x00\xff\xff\x64\x00\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\x6a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x49\x00\xff\xff\xff\xff\x14\x00\x4d\x00\x4e\x00\x4f\x00\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x2b\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\x01\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\x1d\x00\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x2b\x00\x59\x00\x2d\x00\xff\xff\xff\xff\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x6a\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\xff\xff\x44\x00\x1c\x00\x1d\x00\xff\xff\x1f\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x11\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x27\x00\x1f\x00\x29\x00\xff\xff\x2b\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\x01\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\xff\xff\x44\x00\x10\x00\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x08\x00\xff\xff\x0a\x00\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x11\x00\x1b\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x27\x00\xff\xff\x29\x00\xff\xff\x2b\x00\x59\x00\x2d\x00\x25\x00\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x6a\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\x1c\x00\x1d\x00\x27\x00\x1f\x00\x29\x00\x21\x00\x2b\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x01\x00\xff\xff\x2d\x00\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x2b\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\x01\x00\xff\xff\x2d\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x18\x00\x19\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x8b\x00\xff\xff\xff\xff\x8e\x00\xff\xff\x90\x00\x22\x00\x92\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\x99\x00\x9a\x00\x9b\x00\x2d\x00\x9d\x00\xff\xff\x9f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x8b\x00\xff\xff\xff\xff\x8e\x00\xff\xff\x90\x00\x22\x00\x92\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\x99\x00\x9a\x00\x9b\x00\x2d\x00\x9d\x00\xff\xff\x9f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\x8b\x00\xff\xff\xff\xff\x8e\x00\xff\xff\x90\x00\x22\x00\x92\x00\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\x99\x00\x9a\x00\x9b\x00\x2d\x00\x9d\x00\xff\xff\x9f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\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\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x14\x00\xff\xff\xff\xff\xff\xff\x18\x00\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\x27\x00\xff\xff\x29\x00\xff\xff\x2b\x00\xff\xff\x2d\x00\xff\xff\xff\xff\x50\x00\x51\x00\x52\x00\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x62\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6a\x00\x8b\x00\xff\xff\xff\xff\x8e\x00\xff\xff\x90\x00\x18\x00\x92\x00\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x99\x00\x9a\x00\x9b\x00\xff\xff\x9d\x00\xff\xff\x9f\x00\x27\x00\xa1\x00\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\xff\xff\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\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\x27\x00\xff\xff\x29\x00\xff\xff\x2b\x00\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x62\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\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\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\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\x27\x00\xff\xff\x29\x00\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x3e\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\x59\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\x62\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x1b\x00\xff\xff\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x27\x00\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1c\x00\x1d\x00\x10\x00\x1f\x00\x20\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\xff\xff\x1a\x00\x29\x00\x2a\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x51\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x67\x00\xff\xff\x18\x00\x6a\x00\xff\xff\x1b\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x01\x00\x02\x00\xff\xff\x27\x00\x05\x00\x06\x00\xff\xff\x2b\x00\x59\x00\x2d\x00\x69\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\x63\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x6a\x00\x1b\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x6a\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x27\x00\xff\xff\x05\x00\xff\xff\xff\xff\xff\xff\x2d\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\x10\x00\x11\x00\x09\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x10\x00\x11\x00\x12\x00\xff\xff\xff\xff\x1e\x00\xff\xff\x44\x00\x18\x00\xff\xff\x1a\x00\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x59\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\x0f\x00\x10\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x58\x00\x59\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\xff\xff\x0b\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x49\x00\x1f\x00\xff\xff\xff\xff\x4d\x00\x4e\x00\x4f\x00\x25\x00\xff\xff\xff\xff\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x59\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x11\x00\x12\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x01\x00\x25\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x59\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x6a\x00\x1c\x00\xff\xff\xff\xff\x1f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x25\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x58\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x6a\x00\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\x01\x00\xff\xff\x59\x00\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x28\x00\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\x58\x00\x59\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x6a\x00\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x59\x00\x05\x00\x06\x00\xff\xff\x01\x00\x09\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\x6a\x00\xff\xff\x10\x00\x18\x00\x12\x00\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x2a\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x58\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\x19\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x01\x00\x59\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x58\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x6a\x00\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x01\x00\xff\xff\x59\x00\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x18\x00\x12\x00\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x01\x00\xff\xff\xff\xff\x2a\x00\x05\x00\x06\x00\xff\xff\xff\xff\x58\x00\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\x6a\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x2a\x00\x01\x00\x59\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x01\x00\xff\xff\xff\xff\x2a\x00\x05\x00\x06\x00\xff\xff\x01\x00\x59\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x10\x00\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x18\x00\x12\x00\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x2a\x00\x01\x00\x02\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x01\x00\x02\x00\x59\x00\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x6a\x00\x01\x00\xff\xff\xff\xff\x18\x00\x05\x00\xff\xff\x6a\x00\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x10\x00\x11\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x59\x00\x01\x00\x02\x00\xff\xff\xff\xff\x1e\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x6a\x00\xff\xff\x1a\x00\x01\x00\x02\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x59\x00\x05\x00\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\x59\x00\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x6a\x00\x59\x00\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x59\x00\x05\x00\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x6a\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\xff\xff\x59\x00\x01\x00\x02\x00\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x10\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x59\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\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x6a\x00\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\x8c\x00\xff\xff\x8e\x00\xff\xff\xff\xff\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\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\x71\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\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\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\x66\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\x71\x00\x72\x00\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\x71\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\x63\x00\x64\x00\x65\x00\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\x66\x00\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\x7c\x00\xff\xff\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x66\x00\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\x6c\x00\x6d\x00\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\x66\x00\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\x7c\x00\xff\xff\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\x66\x00\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\x7c\x00\xff\xff\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x66\x00\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\x6c\x00\x6d\x00\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\x66\x00\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\x7c\x00\xff\xff\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\x66\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\x7c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x6f\x00\x70\x00\xff\xff\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\x65\x00\x66\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\x66\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\x58\x00\x59\x00\xa0\x00\xa1\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x57\x00\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xa0\x00\xa1\x00\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\x58\x00\x59\x00\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\x00\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\x5e\x00\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\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\x83\x00\xff\xff\xff\xff\x86\x00\x87\x00\xff\xff\x89\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa0\x00\xa1\x00\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\x04\x00\x02\x00\x05\x00\x93\x00\x02\x00\xd4\x02\x1f\x01\x19\x01\x0a\x00\x08\x00\x50\x01\x0a\x00\xbb\x01\x98\x00\x24\x00\x33\x00\x34\x00\x35\x00\x4e\x01\x26\x00\x27\x00\x37\x02\x22\x00\x23\x00\x28\x00\xc7\x01\x29\x00\x6a\x02\x6b\x02\xc3\x02\xd4\xff\x5e\x01\xc6\x02\x24\x00\x94\x00\xec\x01\x9f\x02\x25\x00\x26\x00\x27\x00\x1a\x00\x40\x02\x21\x00\x28\x00\x24\x00\x29\x00\xa0\x02\xa1\x02\x95\x00\x26\x00\x27\x00\x1a\x00\xd2\x01\x6d\x01\x28\x00\x1c\x02\x29\x00\x1a\x00\xd2\x01\xd2\x02\xf8\x01\x24\x00\x72\x01\xc0\x02\x24\x00\x22\x00\x6d\x01\x7c\x01\xb0\x01\x2a\x00\x28\x02\x29\x02\xc8\x01\x29\x00\x90\x02\x78\x02\x29\x00\xd3\x01\x9b\x00\x7d\x01\x7e\x01\x9e\x00\x9f\x00\xd5\x01\x24\x00\x1f\x02\x7f\x01\x80\x01\x2a\x00\x8d\x02\x1a\x00\xcd\x01\x41\x02\x28\x02\x29\x02\x73\x01\x29\x00\x73\x01\x6d\x01\x2a\x00\xe3\x01\x24\x00\x6d\x01\x49\x02\x6e\x01\x1a\x00\xcd\x01\x96\x00\x1a\x00\x34\x02\xda\x00\x28\x00\xd8\x01\x29\x00\x99\x00\x6d\x02\x2a\x00\xa2\x02\xbc\x01\x2a\x00\xd6\x02\x22\x01\x51\x01\x1a\x00\x34\x02\x52\x01\x55\x02\x53\x01\x9a\x00\x36\x00\x6c\x02\x6c\x02\xb8\x02\x38\x00\x25\x01\x21\x01\x22\x01\xa3\x02\x54\x01\x2a\x00\x36\x00\x55\x01\x37\x00\x38\x00\x39\x00\x0d\x00\x3a\x00\x3b\x00\x72\x00\x38\x02\xa4\x02\x0d\x02\x97\x00\x37\x00\x38\x00\x39\x00\x2a\x00\x3a\x00\x3b\x00\xa2\x02\x73\x00\x06\x00\x3c\x00\x03\x00\x03\x00\xdf\x02\x0b\x00\x0b\x00\x09\x00\xa5\x01\x0b\x00\x2b\x00\xa2\x00\x3c\x00\xd4\x01\x38\x00\x25\x01\x4f\x02\xd9\x01\xa3\x02\xd6\x01\x6f\x01\x2b\x00\x64\x02\x65\x02\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x2a\x02\x2b\x02\xa4\x02\xda\x01\x6f\x01\xbe\x01\xbf\x01\xbe\x02\x7b\x01\x91\x02\xd1\x02\x92\x02\x91\x02\xe5\x02\x9f\x00\xd9\x01\xa5\x00\x48\x01\x0d\x00\x74\x00\x17\x02\x75\x00\x76\x00\xce\x01\xa6\x01\x77\x00\x4f\x00\x50\x00\x78\x00\x35\x02\xda\x01\xe5\x02\x2c\x02\x0f\x00\x72\x00\x51\x00\x6f\x01\x49\x01\xcf\x01\xbb\x02\x6f\x01\x23\x01\x31\x02\x79\x00\x36\x02\x24\x01\x73\x00\x1a\x00\x40\x02\x97\x00\xca\x02\x9b\x02\x37\x00\x38\x00\x39\x00\x62\x02\x23\x01\x38\x00\x25\x01\xd8\x01\x24\x01\x26\x01\x72\x00\x0e\x00\x55\x00\x5a\x00\x3b\x00\x7a\x00\x57\x00\x13\x02\x58\x00\x23\x01\x38\x00\x25\x01\x73\x00\x24\x01\x26\x01\x66\x02\xa6\x01\x7c\x01\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x6e\x02\x38\x00\x25\x01\xaa\x00\x66\x02\x26\x01\x0f\x01\x5b\x00\x5c\x00\x74\x00\x0f\x00\x75\x00\x76\x00\x42\x02\x68\x02\x77\x00\x4f\x00\x50\x00\x78\x00\xa6\x01\x9b\x00\x8f\x01\x9d\x00\x9e\x00\x9f\x00\x51\x00\x90\x01\xa1\x00\x91\x01\x80\x01\xb0\x00\x38\x00\xa3\x00\x79\x00\xa4\x00\x3b\x00\x21\x00\x74\x00\xc2\x01\x75\x00\x76\x00\x72\x02\xab\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x8f\x02\xdd\x00\x7e\x01\x9e\x00\x9f\x00\xa5\x00\x51\x00\x55\x00\x1a\x00\x49\x02\x7a\x00\x7c\x02\x22\x00\x58\x00\x79\x00\x81\x02\x48\x01\x7e\x01\x9e\x00\x9f\x00\xac\x02\x40\x01\xab\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x65\x01\x41\x01\x3c\x02\x3b\x00\x71\x02\x8d\x02\x55\x00\x5b\x00\x5c\x00\x7a\x00\x57\x00\x01\x02\x58\x00\x02\x02\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\x6f\x02\xdc\x02\xa1\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x42\x01\x1a\x00\x49\x02\x48\x01\x76\x02\x77\x02\x74\x02\x5b\x00\x5c\x00\x0e\x01\xa2\x00\x9b\x00\x8f\x01\x9d\x00\x9e\x00\x9f\x00\xdd\x02\x90\x01\xa1\x00\x91\x01\x80\x01\x00\x02\x4a\x02\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xea\xfe\x0a\x02\xea\xfe\x17\x02\x0f\x01\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\x1f\x02\xd3\x02\xa1\x00\x65\x01\x03\x02\x15\x00\xa5\x00\x2a\x02\x2b\x02\x16\x00\x78\x02\x17\x00\x38\x00\xa3\x00\x1d\x02\xa4\x00\x3b\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\x0a\x02\x14\x02\xa1\x00\xea\x01\xa1\xff\x38\x00\xa3\x00\x65\x01\xa4\x00\x3b\x00\xa1\xff\xa5\x00\x4b\x02\xc7\x02\xc8\x02\xc9\x02\xcc\x00\x31\x02\x1a\x00\x73\x02\xa2\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa5\x00\x4f\x02\xa1\x00\xaa\x02\x1a\x00\x73\x02\xcd\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xeb\xfe\x02\x01\xeb\xfe\xd8\x00\x54\x01\xd9\x00\xd3\x01\xa2\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\x51\x02\x9f\x01\xa1\x00\xa5\x00\xca\x02\xd5\x01\xcc\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x18\x00\x20\x02\xdc\x00\xdd\x00\xa2\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xcd\x00\x57\x01\xa1\x00\xdf\x01\xe0\x01\xe1\x01\xa5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x19\x00\xe1\x00\x0f\x02\x21\x00\xa2\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\x2c\x01\xa0\x00\xa1\x00\xe4\x00\xe5\x00\xac\x01\xa5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xad\x01\x37\x00\x38\x00\x39\x00\x22\x00\xdd\x00\x24\x02\xdf\x00\xa2\x00\xac\x02\x9f\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa5\x00\xad\x00\xa1\x00\x6f\xfe\x6f\xfe\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xbe\x00\xe2\x00\x3c\x02\x3b\x00\x6f\xfe\xdc\x00\xad\x02\xa2\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xda\x02\xb2\x00\xa1\x00\xa5\x00\xdb\x02\xbf\x00\xc5\x02\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x7a\x02\xe1\x00\xdc\x00\xdd\x00\xa2\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\x44\x02\xb3\x00\xa1\x00\xe4\x00\xe5\x00\x59\x00\xa5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x57\x01\xe1\x00\x38\x00\xa3\x00\xa2\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\x53\x02\xeb\x00\xa1\x00\xe4\x00\xe5\x00\xe2\x02\xa5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x21\x02\xa0\x01\x0d\x02\x3c\x02\x3b\x00\x9b\x00\x8d\x01\x7e\x01\x9e\x00\x9f\x00\xa2\x00\xe6\x00\xce\x02\x13\x00\x8e\x01\xda\x01\xa5\x00\xdc\x02\x38\x00\xa3\x00\x3d\x02\xa4\x00\x3b\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x9b\x00\x43\x02\x7e\x01\x9e\x00\x9f\x00\xa2\x00\x9b\x00\x50\x02\x7e\x01\x9e\x00\x9f\x00\xa5\x00\x25\x02\x40\x00\x41\x00\x2f\x02\xa5\x00\xc5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xaf\x01\xdc\x00\x71\x02\xde\x00\xa2\x00\x9b\x00\xa7\x01\x7e\x01\x9e\x00\x9f\x00\x9b\x00\x8c\x01\x7e\x01\x9e\x00\x9f\x00\x9a\x02\xa5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xe1\x00\x08\x02\x9b\x02\xb3\x01\xa2\x00\x09\x02\xb5\x01\xa1\x01\xb7\x01\x7e\x01\x9e\x00\x9f\x00\xe4\x00\xe5\x00\x40\x00\x41\x00\xa5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x95\x01\x9f\x00\x96\x01\x9d\x02\xa2\x00\xe3\x01\x0c\x02\xa3\x01\xc0\x01\x7e\x01\x9e\x00\x9f\x00\x58\x01\xc5\x01\x3c\x01\x0d\x02\xa5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xa4\x01\x68\x01\x7e\x01\x9e\x00\x9f\x00\xa2\x00\x38\x00\x25\x01\xd5\x00\xd6\x00\xa8\x01\xa2\x00\x7e\x01\x9e\x00\x9f\x00\xdd\x01\xa5\x00\xc6\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xe6\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\xe7\x00\x37\x00\x38\x00\x39\x00\xa2\x00\xa4\x00\x3b\x00\x38\x00\xeb\x01\xa2\x00\xa5\x00\xec\x01\x97\x02\x98\x02\x95\x01\x9f\x00\xa5\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x38\x00\xa3\x00\x59\x00\xa4\x00\x3b\x00\x56\x02\x9e\x00\x9f\x00\x45\x01\x39\x01\x57\x02\xea\x01\x46\x01\xb6\x02\x9e\x00\x9f\x00\xa5\x00\x47\x01\x3a\x01\x38\x00\xa3\x00\xa5\x00\xa4\x00\x3b\x00\x3b\x01\x97\x01\x58\x02\x59\x02\x5a\x02\xd4\x00\x5b\x02\x38\x00\xa3\x00\x3c\x01\xa4\x00\x3b\x00\xd5\x00\xd6\x00\xb7\x02\xf9\x01\xa5\x00\x38\x00\xa3\x00\xee\x01\xa4\x00\x3b\x00\x00\x02\x40\x00\x41\x00\xb8\x02\xb2\x02\x9f\x00\xa5\x00\x98\x01\x99\x01\x2f\x01\x38\x00\xa3\x00\x3f\x02\xa4\x00\x3b\x00\x69\x01\xa5\x00\xb3\x02\x9e\x00\x9f\x00\x38\x00\xa3\x00\x5f\x01\xa4\x00\x3b\x00\x75\x01\xb5\x02\x9f\x00\x45\x02\x46\x02\x47\x02\xa5\x00\xa8\x02\x9f\x00\x77\x01\xb9\x02\xba\x02\x6c\x01\xb4\x02\x59\x02\x5a\x02\xa5\x00\x5b\x02\x9d\x02\x9e\x02\x95\x01\x9f\x00\x19\x00\x1a\x00\x1b\x00\x38\x00\xa3\x00\x5c\x02\xa4\x00\x3b\x00\x1c\x00\x1a\x00\x1b\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xa5\x02\xa6\x02\x38\x00\xa3\x00\x79\x01\xa4\x00\x5d\x02\x11\x02\x13\x00\xa5\x00\x38\x00\xa3\x00\x81\x01\xa4\x00\x3b\x00\x82\x01\xe0\x00\xe1\x00\x8b\x01\xe2\x00\x3e\x01\x7d\x02\x7e\x02\xa5\x00\xc7\xfe\x7f\x02\x80\x02\x9d\x01\x13\x01\xe4\x00\xe5\x00\xa5\x00\x32\x01\x38\x00\x39\x00\xae\x00\x33\x01\x3b\x00\xbb\x02\x8f\x00\x90\x00\x38\x00\xa3\x00\xfb\x00\x33\x01\x3b\x00\x38\x00\xa3\x00\x5c\x02\xa4\x00\x3b\x00\x37\x00\x38\x00\x39\x00\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x38\x00\xa3\x00\xa2\x01\xa4\x00\x5d\x02\x30\x01\x13\x00\xa5\x00\x38\x00\xa3\x00\xe7\x00\xa4\x00\x3b\x00\xea\x00\x38\x00\xa3\x00\x1c\x01\xa4\x00\x3b\x00\x71\x00\x02\x01\xa5\x00\xd8\x00\xc2\x01\xd9\x00\xc3\x01\xc4\x01\x38\x00\xa3\x00\xa5\x00\xa4\x00\x3b\x00\x68\x01\x3f\x01\x05\x02\xa5\x00\xce\x02\x71\x00\x1f\x00\xd5\x00\xd6\x00\x02\x01\x1a\x01\xd8\x00\x05\x02\xd9\x00\x06\x02\x71\x00\xa5\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x07\x01\xdd\x00\xde\x00\xdf\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x08\x01\x5b\x01\x38\x00\x39\x00\x1e\x00\x33\x01\x3b\x00\x67\x00\x0f\x00\x09\x01\x68\x00\x0a\x01\x0b\x01\xe1\x02\xe2\x00\x2f\x00\xd1\x00\xba\x00\xd6\x02\xd2\x00\xe4\x02\xd3\x00\x69\x00\xd4\x00\x0c\x01\x0d\x01\x2a\x01\x2b\x01\x6a\x00\xd1\x02\xd5\x00\xd6\x00\xd7\x00\x6f\xfe\xd8\x00\x2c\x01\xd9\x00\x3e\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x61\x01\x7f\x00\x80\x00\x81\x00\x37\x00\x38\x00\x39\x00\x71\x00\x91\x00\x92\x00\x12\x00\x13\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x2d\x00\xb2\x02\x30\x00\x31\x00\xbb\x00\x87\x00\x40\x00\x41\x00\x4b\x00\xbc\x00\x6f\xfe\x6f\xfe\x5f\x00\x60\x00\x89\x02\x8a\x02\xbd\x00\x8d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x11\x00\x12\x00\xc0\x02\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6b\x01\x6c\x01\x40\x00\x2d\x00\x11\x00\x12\x00\xc2\x02\x6f\xfe\x10\x01\x11\x01\x6f\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x11\x00\x12\x00\xc3\x02\x2d\x00\x6f\xfe\xc5\x02\x6f\xfe\x2d\x00\x6f\xfe\x4b\x00\x6f\xfe\xcc\x02\x2d\x00\x94\x02\xa8\x02\xb0\x02\x3e\x00\xaa\xfe\xaa\x02\x68\x02\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x64\x02\x6f\xfe\x7e\xff\x6f\xfe\x6a\x02\x76\x02\x2d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x2d\x00\x51\x01\x6f\xfe\x3c\x02\x52\x01\x6f\xfe\x18\x02\x6f\xfe\x7c\x02\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x83\x02\x6f\xfe\x84\x02\x6f\xfe\x54\x01\xbf\x00\x6f\xfe\x55\x01\x86\x02\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x8c\x02\xd8\x01\x0f\x02\x16\x02\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x6f\xfe\x42\x01\x18\x02\x6f\xfe\x17\x02\x1a\x02\x1c\x02\xc0\x00\x1b\x02\x4b\x00\xc1\x00\x71\x01\x2d\x00\x58\x00\x23\x02\x6f\xfe\x27\x02\x6f\xfe\x28\x02\x6f\xfe\x31\x02\x6f\xfe\x3a\x02\x37\x00\x38\x00\x39\x00\x4d\x00\x5a\x00\x3b\x00\x3b\x02\x40\x02\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x53\x02\x6f\xfe\x6f\xfe\x6f\xfe\x4e\x02\x6f\xfe\xc2\x01\x6f\xfe\x55\x02\xaa\x01\xab\x01\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x7f\xff\xae\x01\x6f\xfe\x71\x01\xb7\x01\x6f\xfe\xb3\x01\x6f\xfe\xb5\x01\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\xba\x01\x6f\xfe\x7f\xff\x6f\xfe\xbb\x01\xb9\x01\x6f\xfe\xbe\x01\xc2\x01\x6f\xfe\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\xc7\x01\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\xca\x01\xd1\x01\xd8\x01\xd2\x01\x0a\xff\x36\x01\xe2\x01\x0a\xff\x3e\x00\x3f\x00\x0a\xff\x0a\xff\x0a\xff\x71\x01\x0a\xff\xea\x01\x0a\xff\xee\x01\x0a\xff\x75\x01\xfd\x01\xfe\x01\x0a\xff\x42\x00\x0a\xff\x0a\xff\x0a\xff\xff\x01\x0a\xff\xbd\x02\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\x02\x07\x02\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x21\x01\x79\xfe\x78\xfe\x7b\xfe\x7e\xfe\x0a\xff\x35\x01\x0a\xff\x36\x01\x38\x01\x42\x01\x4a\x01\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x0a\xff\x43\x01\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x44\x01\x0a\xff\x4b\x01\x4d\x01\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x6f\xfe\x50\x01\x0a\xff\x6f\xfe\x5d\x01\x6f\xfe\x4e\x01\x61\x01\x64\x01\x4b\x00\x65\x01\xf9\x00\x84\x01\x71\x01\x75\x01\x6f\xfe\x77\x01\x6f\xfe\x79\x01\x6f\xfe\x93\x01\x6f\xfe\x94\x01\x95\x01\x2d\x00\x40\x00\x4d\x00\x3e\x00\x9f\x01\xad\x00\xb0\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\xad\x00\x6f\xfe\x6f\xfe\x6f\xfe\xb2\x00\x6f\xfe\xe9\x00\x6f\xfe\x12\x01\x1c\x01\x1e\x01\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x0d\x00\x1f\x01\x6f\xfe\x2e\x00\x4e\x00\x6f\xfe\x2f\x00\x33\x00\x1e\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\xc4\x00\x6f\xfe\xff\xff\x6f\xfe\x0e\x00\x08\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x67\x00\x00\x00\xc0\x00\x68\x00\x00\x00\xc1\x00\x00\x00\x00\x00\x58\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x37\x00\x38\x00\x39\x00\x6a\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x7e\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x3e\x00\x3f\x00\x71\x00\x00\x00\x40\x00\x41\x00\x82\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x84\x00\x85\x00\x86\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x88\x00\x00\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x00\x00\x8d\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x4d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x7e\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x4d\x00\xdd\x01\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x82\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x84\x00\x85\x00\x86\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x00\x00\x8d\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x00\x00\x4d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x44\x00\x00\x00\x00\x00\x89\x01\x48\x00\x49\x00\x4a\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x6f\xfe\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x6f\xfe\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\xaf\x01\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x01\x8d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x4b\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\xe0\x00\xe1\x00\x00\x00\xe2\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\xe4\x00\xe5\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x08\x01\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x09\x01\x00\x00\x00\x00\xe1\x00\x69\x00\xe2\x00\x7d\x00\x00\x00\x6f\xfe\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x00\xe5\x00\x00\x00\x00\x00\x3e\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x6f\xfe\x00\x00\x71\x00\x5a\x01\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\xdc\x00\x00\x00\xde\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x67\x01\x6f\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x09\x01\x00\x00\x00\x00\xe1\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x4b\x00\x6f\xfe\x68\x01\x00\x00\x00\x00\x00\x00\xe4\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\xe0\x00\xe1\x00\x69\x00\xe2\x00\x7d\x00\xe3\x00\x6f\xfe\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x6f\xfe\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x3e\x00\x00\x00\x6a\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x01\x8d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x89\x01\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x3e\x00\x00\x00\x6a\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x01\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x67\x00\xf9\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\xd1\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x4b\x01\xba\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\xd5\x00\xd6\x00\xd7\x00\x6a\x00\xd8\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\xd1\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x3c\x01\xba\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\xd5\x00\xd6\x00\xd7\x00\x6a\x00\xd8\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\xd1\x00\x00\x00\x00\x00\xd2\x00\x00\x00\x4b\x01\xba\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\xd5\x00\xd6\x00\xd7\x00\x6a\x00\xd8\x00\x00\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x01\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xfb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x89\x00\x8a\x00\x8b\x00\x00\x00\x00\x00\x8d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x00\x00\xce\x00\xcf\x00\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x6f\xfe\xd1\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xd3\x00\x67\x00\xd4\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\xd8\x00\x00\x00\xd9\x00\x69\x00\xda\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x89\x00\x8a\x00\x8b\x00\x00\x00\x00\x00\x8d\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x87\x00\x00\x00\x00\x00\x4b\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x8d\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x4d\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x6f\xfe\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x7c\x00\x00\x00\x6f\xfe\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x6f\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x4b\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x7f\x00\x80\x00\x81\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x4b\x00\x5e\x00\x3f\x00\x5f\x00\x60\x00\x61\x00\x41\x00\x17\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x68\x00\x00\x00\x00\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x3f\x00\x69\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\xe1\x00\x42\x00\xe2\x00\x3e\x01\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x00\x00\x43\x00\xe4\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x71\x00\xe2\xfe\xe2\xfe\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x18\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x67\x00\x4d\x00\x00\x00\x68\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x3e\x00\x3f\x00\x00\x00\x69\x00\x40\x00\x41\x00\x00\x00\x6f\xfe\x4b\x00\x6a\x00\x3f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\x00\x00\x4c\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\xfe\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x4d\x00\x68\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x34\x02\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x3e\x00\x3f\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x4d\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x69\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x6a\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x28\x01\xd8\x02\xdd\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\xa7\x00\x67\x01\xa8\x00\x00\x00\x00\x00\xd9\x02\x00\x00\x71\x00\xa9\x00\x00\x00\x09\x01\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x68\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x01\xdd\x01\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\xaa\x00\x4b\x00\x40\x00\x41\x00\x00\x00\x9b\x01\xdd\x00\x00\x00\xdf\x00\x4d\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x9c\x01\x00\x00\x44\x00\xe2\x00\x00\x00\x00\x00\x48\x00\x49\x00\x4a\x00\x9d\x01\x00\x00\x00\x00\x81\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x4b\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x67\x01\xa8\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x09\x01\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x68\x01\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x9b\x01\xdd\x00\x4b\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x4d\x00\x9c\x01\x00\x00\x00\x00\xe2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x01\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\xaa\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x02\x3e\x00\x00\x00\x4b\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x5d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x5d\xff\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x81\xff\x00\x00\xb1\x02\x00\x00\x00\x00\x00\x00\xaa\x00\x4b\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x4d\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x4b\x00\x40\x00\x41\x00\x00\x00\x3e\x00\x5d\xff\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x4d\x00\x00\x00\xa7\x00\xa9\x00\xa8\x00\x00\x00\x00\x00\x5d\xff\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xb1\x02\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\xaa\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x65\x01\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x3e\x00\x4b\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\xaa\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x4d\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x00\x00\x5f\x00\x60\x00\x40\x00\x41\x00\x00\x00\x3e\x00\x00\x00\x4b\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5f\x02\xa9\x00\xa8\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x00\x00\x00\x00\x60\x02\x40\x00\x41\x00\x00\x00\x00\x00\xaa\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x4d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x60\x02\x3e\x00\x4b\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x3e\x00\x00\x00\x00\x00\xaf\x02\x40\x00\x41\x00\x00\x00\x3e\x00\x4b\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x5f\x02\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x00\xa9\x00\xa8\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x60\x02\x3e\x00\x3f\x00\x00\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x3e\x00\x3f\x00\x4b\x00\x00\x00\x40\x00\x41\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x3e\x00\x00\x00\x00\x00\xc9\x00\x40\x00\x00\x00\x4d\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x28\x01\x29\x01\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x4b\x00\x3e\x00\x3f\x00\x00\x00\x00\x00\x2a\x01\x00\x00\x00\x00\x00\x00\x5a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x4d\x00\x00\x00\x43\x00\x3e\x00\x3f\x00\x2e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x4b\x00\x40\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x5a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x4d\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x4b\x00\x40\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4d\x00\x00\x00\x28\x01\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x4b\x00\x3e\x00\x3f\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x00\xf9\x00\xb5\x00\xb6\x00\xfa\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\xfb\x00\xfc\x00\x4d\x00\x00\x00\xfd\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\xfe\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x01\x01\x01\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xd5\x00\xd6\x00\x02\x01\x03\x01\xd8\x00\x04\x01\x05\x01\x5b\x00\x5c\x00\xe4\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\xe2\x02\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf0\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x8a\x02\xf2\x00\xf3\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\xe4\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x51\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\xe5\x01\xe6\x01\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xe4\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\xf1\x01\xe6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf0\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x31\x01\xf2\x00\xf3\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\xf0\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\xf1\x00\xf2\x00\xf3\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xca\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x84\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x86\x01\x00\x00\xbd\x02\x00\x00\x5b\x00\x5c\x00\x4e\x00\x4f\x00\x50\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x51\x00\x00\x00\x00\x00\x52\x00\x13\x00\x00\x00\x53\x00\x13\x02\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x84\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x86\x01\x00\x00\x60\x02\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xe4\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x86\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\xca\x01\xcb\x01\xcc\x01\x4f\x00\x50\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x84\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x86\x01\x00\x00\x4c\x02\x00\x00\x5b\x00\x5c\x00\x4e\x00\x4f\x00\x50\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x51\x00\x00\x00\x00\x00\x52\x00\x13\x00\x00\x00\x53\x00\x54\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x84\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x51\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x86\x01\x00\x00\xb1\x01\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf0\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x01\xf3\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x84\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x51\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x86\x01\x00\x00\x87\x01\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x84\x01\xb5\x00\xb6\x00\x85\x01\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\x00\x00\x8a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf5\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\xf6\x00\xf7\x00\x00\x00\xf5\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\xf6\x01\x51\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xe6\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\xcf\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xcc\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x8e\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x94\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x61\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x79\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x84\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x87\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x10\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x23\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x2d\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x2e\x02\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\xf2\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf3\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\xf4\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xf7\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\xfb\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x5a\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x71\x01\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\xc9\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xe9\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\xee\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\xef\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x36\x01\xb6\x00\xed\x00\xb8\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\xec\x00\xb6\x00\xed\x00\xb8\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x02\x00\x00\x75\x00\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x51\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x96\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x75\x00\x76\x00\x5b\x00\x5c\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x01\x5d\x01\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x5b\x00\x5c\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x5d\x01\x76\x00\x00\x00\x00\x00\x77\x00\x4f\x00\x50\x00\x78\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x32\x02\xcc\x01\x4f\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x4f\x00\x50\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x61\x01\x4f\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x62\x01\x4f\x00\x50\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x4f\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\xf4\x00\x4f\x00\x50\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x39\x00\x59\x00\x5a\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x00\x5c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = array (1, 413) [- (1 , happyReduce_1),- (2 , happyReduce_2),- (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)- ]--happy_n_terms = 108 :: Int-happy_n_nonterms = 172 :: Int--happyReduce_1 = happyMonadReduce 1# 0# happyReduction_1-happyReduction_1 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut5 happy_x_1 of { happy_var_1 -> - ( mkPageModule happy_var_1)}- ) (\r -> happyReturn (happyIn4 r))--happyReduce_2 = happyMonadReduce 5# 0# happyReduction_2-happyReduction_2 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut6 happy_x_2 of { happy_var_2 -> - case happyOut165 happy_x_4 of { happy_var_4 -> - case happyOut5 happy_x_5 of { happy_var_5 -> - ( mkPage happy_var_2 happy_var_4 happy_var_5)}}}- ) (\r -> happyReturn (happyIn4 r))--happyReduce_3 = happySpecReduce_1 0# happyReduction_3-happyReduction_3 happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - happyIn4- (happy_var_1- )}--happyReduce_4 = happyMonadReduce 10# 1# happyReduction_4-happyReduction_4 (happy_x_10 `HappyStk`- happy_x_9 `HappyStk`- happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- 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) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut109 happy_x_3 of { happy_var_3 -> - case happyOut111 happy_x_4 of { happy_var_4 -> - case happyOut113 happy_x_5 of { happy_var_5 -> - case happyOut107 happy_x_7 of { happy_var_7 -> - case happyOut109 happy_x_9 of { happy_var_9 -> - ( do { n <- checkEqNames happy_var_3 happy_var_9;- let { cn = reverse happy_var_7;- as = reverse happy_var_4; };- return $ HsXTag happy_var_1 n as happy_var_5 cn })}}}}}}- ) (\r -> happyReturn (happyIn5 r))--happyReduce_5 = happyReduce 6# 1# happyReduction_5-happyReduction_5 (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 happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut109 happy_x_3 of { happy_var_3 -> - case happyOut111 happy_x_4 of { happy_var_4 -> - case happyOut113 happy_x_5 of { happy_var_5 -> - happyIn5- (HsXETag happy_var_1 happy_var_3 (reverse happy_var_4) happy_var_5- ) `HappyStk` happyRest}}}}--happyReduce_6 = happyReduce 6# 2# happyReduction_6-happyReduction_6 (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 happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut168 happy_x_3 of { happy_var_3 -> - case happyOut11 happy_x_4 of { happy_var_4 -> - case happyOut7 happy_x_6 of { happy_var_6 -> - happyIn6- (HsModule happy_var_1 happy_var_3 happy_var_4 (fst happy_var_6) (snd happy_var_6)- ) `HappyStk` happyRest}}}}--happyReduce_7 = happySpecReduce_2 2# happyReduction_7-happyReduction_7 happy_x_2- happy_x_1- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut7 happy_x_2 of { happy_var_2 -> - happyIn6- (HsModule happy_var_1 main_mod (Just [HsEVar (UnQual main_name)])- (fst happy_var_2) (snd happy_var_2)- )}}--happyReduce_8 = happySpecReduce_3 3# happyReduction_8-happyReduction_8 happy_x_3- happy_x_2- happy_x_1- = case happyOut8 happy_x_2 of { happy_var_2 -> - happyIn7- (happy_var_2- )}--happyReduce_9 = happySpecReduce_3 3# happyReduction_9-happyReduction_9 happy_x_3- happy_x_2- happy_x_1- = case happyOut8 happy_x_2 of { happy_var_2 -> - happyIn7- (happy_var_2- )}--happyReduce_10 = happyReduce 4# 4# happyReduction_10-happyReduction_10 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut16 happy_x_2 of { happy_var_2 -> - case happyOut31 happy_x_4 of { happy_var_4 -> - happyIn8- ((reverse happy_var_2, happy_var_4)- ) `HappyStk` happyRest}}--happyReduce_11 = happySpecReduce_2 4# happyReduction_11-happyReduction_11 happy_x_2- happy_x_1- = case happyOut31 happy_x_2 of { happy_var_2 -> - happyIn8- (([], happy_var_2)- )}--happyReduce_12 = happySpecReduce_3 4# happyReduction_12-happyReduction_12 happy_x_3- happy_x_2- happy_x_1- = case happyOut16 happy_x_2 of { happy_var_2 -> - happyIn8- ((reverse happy_var_2, [])- )}--happyReduce_13 = happySpecReduce_1 4# happyReduction_13-happyReduction_13 happy_x_1- = happyIn8- (([], [])- )--happyReduce_14 = happySpecReduce_2 5# happyReduction_14-happyReduction_14 happy_x_2- happy_x_1- = happyIn9- (()- )--happyReduce_15 = happySpecReduce_1 6# happyReduction_15-happyReduction_15 happy_x_1- = happyIn10- (()- )--happyReduce_16 = happySpecReduce_0 6# happyReduction_16-happyReduction_16 = happyIn10- (()- )--happyReduce_17 = happySpecReduce_1 7# happyReduction_17-happyReduction_17 happy_x_1- = case happyOut12 happy_x_1 of { happy_var_1 -> - happyIn11- (Just happy_var_1- )}--happyReduce_18 = happySpecReduce_0 7# happyReduction_18-happyReduction_18 = happyIn11- (Nothing- )--happyReduce_19 = happyReduce 4# 8# happyReduction_19-happyReduction_19 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut14 happy_x_2 of { happy_var_2 -> - happyIn12- (reverse happy_var_2- ) `HappyStk` happyRest}--happyReduce_20 = happySpecReduce_3 8# happyReduction_20-happyReduction_20 happy_x_3- happy_x_2- happy_x_1- = happyIn12- ([]- )--happyReduce_21 = happySpecReduce_1 9# happyReduction_21-happyReduction_21 happy_x_1- = happyIn13- (()- )--happyReduce_22 = happySpecReduce_0 9# happyReduction_22-happyReduction_22 = happyIn13- (()- )--happyReduce_23 = happySpecReduce_3 10# happyReduction_23-happyReduction_23 happy_x_3- happy_x_2- happy_x_1- = case happyOut14 happy_x_1 of { happy_var_1 -> - case happyOut15 happy_x_3 of { happy_var_3 -> - happyIn14- (happy_var_3 : happy_var_1- )}}--happyReduce_24 = happySpecReduce_1 10# happyReduction_24-happyReduction_24 happy_x_1- = case happyOut15 happy_x_1 of { happy_var_1 -> - happyIn14- ([happy_var_1]- )}--happyReduce_25 = happySpecReduce_1 11# happyReduction_25-happyReduction_25 happy_x_1- = case happyOut138 happy_x_1 of { happy_var_1 -> - happyIn15- (HsEVar happy_var_1- )}--happyReduce_26 = happySpecReduce_1 11# happyReduction_26-happyReduction_26 happy_x_1- = case happyOut171 happy_x_1 of { happy_var_1 -> - happyIn15- (HsEAbs happy_var_1- )}--happyReduce_27 = happyReduce 4# 11# happyReduction_27-happyReduction_27 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut171 happy_x_1 of { happy_var_1 -> - happyIn15- (HsEThingAll happy_var_1- ) `HappyStk` happyRest}--happyReduce_28 = happySpecReduce_3 11# happyReduction_28-happyReduction_28 happy_x_3- happy_x_2- happy_x_1- = case happyOut171 happy_x_1 of { happy_var_1 -> - happyIn15- (HsEThingWith happy_var_1 []- )}--happyReduce_29 = happyReduce 4# 11# happyReduction_29-happyReduction_29 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut171 happy_x_1 of { happy_var_1 -> - case happyOut25 happy_x_3 of { happy_var_3 -> - happyIn15- (HsEThingWith happy_var_1 (reverse happy_var_3)- ) `HappyStk` happyRest}}--happyReduce_30 = happySpecReduce_2 11# happyReduction_30-happyReduction_30 happy_x_2- happy_x_1- = case happyOut168 happy_x_2 of { happy_var_2 -> - happyIn15- (HsEModuleContents happy_var_2- )}--happyReduce_31 = happySpecReduce_3 12# happyReduction_31-happyReduction_31 happy_x_3- happy_x_2- happy_x_1- = case happyOut16 happy_x_1 of { happy_var_1 -> - case happyOut17 happy_x_3 of { happy_var_3 -> - happyIn16- (happy_var_3 : happy_var_1- )}}--happyReduce_32 = happySpecReduce_1 12# happyReduction_32-happyReduction_32 happy_x_1- = case happyOut17 happy_x_1 of { happy_var_1 -> - happyIn16- ([happy_var_1]- )}--happyReduce_33 = happyReduce 6# 13# happyReduction_33-happyReduction_33 (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 happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut18 happy_x_3 of { happy_var_3 -> - case happyOut168 happy_x_4 of { happy_var_4 -> - case happyOut19 happy_x_5 of { happy_var_5 -> - case happyOut20 happy_x_6 of { happy_var_6 -> - happyIn17- (HsImportDecl happy_var_1 happy_var_4 happy_var_3 happy_var_5 happy_var_6- ) `HappyStk` happyRest}}}}}--happyReduce_34 = happySpecReduce_1 14# happyReduction_34-happyReduction_34 happy_x_1- = happyIn18- (True- )--happyReduce_35 = happySpecReduce_0 14# happyReduction_35-happyReduction_35 = happyIn18- (False- )--happyReduce_36 = happySpecReduce_2 15# happyReduction_36-happyReduction_36 happy_x_2- happy_x_1- = case happyOut168 happy_x_2 of { happy_var_2 -> - happyIn19- (Just happy_var_2- )}--happyReduce_37 = happySpecReduce_0 15# happyReduction_37-happyReduction_37 = happyIn19- (Nothing- )--happyReduce_38 = happySpecReduce_1 16# happyReduction_38-happyReduction_38 happy_x_1- = case happyOut21 happy_x_1 of { happy_var_1 -> - happyIn20- (Just happy_var_1- )}--happyReduce_39 = happySpecReduce_0 16# happyReduction_39-happyReduction_39 = happyIn20- (Nothing- )--happyReduce_40 = happyReduce 5# 17# happyReduction_40-happyReduction_40 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut22 happy_x_1 of { happy_var_1 -> - case happyOut23 happy_x_3 of { happy_var_3 -> - happyIn21- ((happy_var_1, reverse happy_var_3)- ) `HappyStk` happyRest}}--happyReduce_41 = happyReduce 4# 17# happyReduction_41-happyReduction_41 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut22 happy_x_1 of { happy_var_1 -> - happyIn21- ((happy_var_1, [])- ) `HappyStk` happyRest}--happyReduce_42 = happySpecReduce_1 18# happyReduction_42-happyReduction_42 happy_x_1- = happyIn22- (True- )--happyReduce_43 = happySpecReduce_0 18# happyReduction_43-happyReduction_43 = happyIn22- (False- )--happyReduce_44 = happySpecReduce_3 19# happyReduction_44-happyReduction_44 happy_x_3- happy_x_2- happy_x_1- = case happyOut23 happy_x_1 of { happy_var_1 -> - case happyOut24 happy_x_3 of { happy_var_3 -> - happyIn23- (happy_var_3 : happy_var_1- )}}--happyReduce_45 = happySpecReduce_1 19# happyReduction_45-happyReduction_45 happy_x_1- = case happyOut24 happy_x_1 of { happy_var_1 -> - happyIn23- ([happy_var_1]- )}--happyReduce_46 = happySpecReduce_1 20# happyReduction_46-happyReduction_46 happy_x_1- = case happyOut136 happy_x_1 of { happy_var_1 -> - happyIn24- (HsIVar happy_var_1- )}--happyReduce_47 = happySpecReduce_1 20# happyReduction_47-happyReduction_47 happy_x_1- = case happyOut169 happy_x_1 of { happy_var_1 -> - happyIn24- (HsIAbs happy_var_1- )}--happyReduce_48 = happyReduce 4# 20# happyReduction_48-happyReduction_48 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut169 happy_x_1 of { happy_var_1 -> - happyIn24- (HsIThingAll happy_var_1- ) `HappyStk` happyRest}--happyReduce_49 = happySpecReduce_3 20# happyReduction_49-happyReduction_49 happy_x_3- happy_x_2- happy_x_1- = case happyOut169 happy_x_1 of { happy_var_1 -> - happyIn24- (HsIThingWith happy_var_1 []- )}--happyReduce_50 = happyReduce 4# 20# happyReduction_50-happyReduction_50 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut169 happy_x_1 of { happy_var_1 -> - case happyOut25 happy_x_3 of { happy_var_3 -> - happyIn24- (HsIThingWith happy_var_1 (reverse happy_var_3)- ) `HappyStk` happyRest}}--happyReduce_51 = happySpecReduce_3 21# happyReduction_51-happyReduction_51 happy_x_3- happy_x_2- happy_x_1- = case happyOut25 happy_x_1 of { happy_var_1 -> - case happyOut26 happy_x_3 of { happy_var_3 -> - happyIn25- (happy_var_3 : happy_var_1- )}}--happyReduce_52 = happySpecReduce_1 21# happyReduction_52-happyReduction_52 happy_x_1- = case happyOut26 happy_x_1 of { happy_var_1 -> - happyIn25- ([happy_var_1]- )}--happyReduce_53 = happySpecReduce_1 22# happyReduction_53-happyReduction_53 happy_x_1- = case happyOut136 happy_x_1 of { happy_var_1 -> - happyIn26- (HsVarName happy_var_1- )}--happyReduce_54 = happySpecReduce_1 22# happyReduction_54-happyReduction_54 happy_x_1- = case happyOut140 happy_x_1 of { happy_var_1 -> - happyIn26- (HsConName happy_var_1- )}--happyReduce_55 = happyReduce 4# 23# happyReduction_55-happyReduction_55 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut29 happy_x_2 of { happy_var_2 -> - case happyOut28 happy_x_3 of { happy_var_3 -> - case happyOut30 happy_x_4 of { happy_var_4 -> - happyIn27- (HsInfixDecl happy_var_1 happy_var_2 happy_var_3 (reverse happy_var_4)- ) `HappyStk` happyRest}}}}--happyReduce_56 = happySpecReduce_0 24# happyReduction_56-happyReduction_56 = happyIn28- (9- )--happyReduce_57 = happyMonadReduce 1# 24# happyReduction_57-happyReduction_57 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOutTok happy_x_1 of { (IntTok happy_var_1) -> - ( checkPrec happy_var_1)}- ) (\r -> happyReturn (happyIn28 r))--happyReduce_58 = happySpecReduce_1 25# happyReduction_58-happyReduction_58 happy_x_1- = happyIn29- (HsAssocNone- )--happyReduce_59 = happySpecReduce_1 25# happyReduction_59-happyReduction_59 happy_x_1- = happyIn29- (HsAssocLeft- )--happyReduce_60 = happySpecReduce_1 25# happyReduction_60-happyReduction_60 happy_x_1- = happyIn29- (HsAssocRight- )--happyReduce_61 = happySpecReduce_3 26# happyReduction_61-happyReduction_61 happy_x_3- happy_x_2- happy_x_1- = case happyOut30 happy_x_1 of { happy_var_1 -> - case happyOut147 happy_x_3 of { happy_var_3 -> - happyIn30- (happy_var_3 : happy_var_1- )}}--happyReduce_62 = happySpecReduce_1 26# happyReduction_62-happyReduction_62 happy_x_1- = case happyOut147 happy_x_1 of { happy_var_1 -> - happyIn30- ([happy_var_1]- )}--happyReduce_63 = happyMonadReduce 2# 27# happyReduction_63-happyReduction_63 (happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> - ( checkRevDecls happy_var_1)}- ) (\r -> happyReturn (happyIn31 r))--happyReduce_64 = happySpecReduce_3 28# happyReduction_64-happyReduction_64 happy_x_3- happy_x_2- happy_x_1- = case happyOut32 happy_x_1 of { happy_var_1 -> - case happyOut33 happy_x_3 of { happy_var_3 -> - happyIn32- (happy_var_3 : happy_var_1- )}}--happyReduce_65 = happySpecReduce_1 28# happyReduction_65-happyReduction_65 happy_x_1- = case happyOut33 happy_x_1 of { happy_var_1 -> - happyIn32- ([happy_var_1]- )}--happyReduce_66 = happyReduce 5# 29# happyReduction_66-happyReduction_66 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut55 happy_x_3 of { happy_var_3 -> - case happyOut51 happy_x_5 of { happy_var_5 -> - happyIn33- (HsTypeDecl happy_var_1 (fst happy_var_3) (snd happy_var_3) happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_67 = happyMonadReduce 5# 29# happyReduction_67-happyReduction_67 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOut64 happy_x_4 of { happy_var_4 -> - case happyOut76 happy_x_5 of { happy_var_5 -> - ( do { (cs,c,t) <- checkDataHeader happy_var_3;- return (HsDataDecl happy_var_1 cs c t (reverse happy_var_4) happy_var_5) })}}}}- ) (\r -> happyReturn (happyIn33 r))--happyReduce_68 = happyMonadReduce 5# 29# happyReduction_68-happyReduction_68 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOut60 happy_x_5 of { happy_var_5 -> - ( do { (cs,c,t) <- checkDataHeader happy_var_3;- return (HsGDataDecl happy_var_1 cs c t (reverse happy_var_5)) })}}}- ) (\r -> happyReturn (happyIn33 r))--happyReduce_69 = happyMonadReduce 6# 29# happyReduction_69-happyReduction_69 (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) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOut66 happy_x_5 of { happy_var_5 -> - case happyOut76 happy_x_6 of { happy_var_6 -> - ( do { (cs,c,t) <- checkDataHeader happy_var_3;- return (HsNewTypeDecl happy_var_1 cs c t happy_var_5 happy_var_6) })}}}}- ) (\r -> happyReturn (happyIn33 r))--happyReduce_70 = happyMonadReduce 5# 29# happyReduction_70-happyReduction_70 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOut57 happy_x_4 of { happy_var_4 -> - case happyOut78 happy_x_5 of { happy_var_5 -> - ( do { (cs,c,vs) <- checkClassHeader happy_var_3;- return (HsClassDecl happy_var_1 cs c vs happy_var_4 happy_var_5) })}}}}- ) (\r -> happyReturn (happyIn33 r))--happyReduce_71 = happyMonadReduce 4# 29# happyReduction_71-happyReduction_71 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut51 happy_x_3 of { happy_var_3 -> - case happyOut79 happy_x_4 of { happy_var_4 -> - ( do { (cs,c,ts) <- checkInstHeader happy_var_3;- return (HsInstDecl happy_var_1 cs c ts happy_var_4) })}}}- ) (\r -> happyReturn (happyIn33 r))--happyReduce_72 = happyReduce 5# 29# happyReduction_72-happyReduction_72 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut34 happy_x_4 of { happy_var_4 -> - happyIn33- (HsDefaultDecl happy_var_1 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_73 = happyMonadReduce 4# 29# happyReduction_73-happyReduction_73 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - ( do { e <- checkExpr happy_var_3;- return $ HsSpliceDecl happy_var_1 $ HsParenSplice e })}}- ) (\r -> happyReturn (happyIn33 r))--happyReduce_74 = happyReduce 6# 29# happyReduction_74-happyReduction_74 (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 happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_4 of { happy_var_4 -> - case happyOut43 happy_x_5 of { happy_var_5 -> - case happyOut44 happy_x_6 of { happy_var_6 -> - happyIn33- (let (s,n,t) = happy_var_6 in HsForImp happy_var_1 happy_var_4 happy_var_5 s n t- ) `HappyStk` happyRest}}}}--happyReduce_75 = happyReduce 5# 29# happyReduction_75-happyReduction_75 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut42 happy_x_4 of { happy_var_4 -> - case happyOut44 happy_x_5 of { happy_var_5 -> - happyIn33- (let (s,n,t) = happy_var_5 in HsForExp happy_var_1 happy_var_4 s n t- ) `HappyStk` happyRest}}}--happyReduce_76 = happySpecReduce_1 29# happyReduction_76-happyReduction_76 happy_x_1- = case happyOut37 happy_x_1 of { happy_var_1 -> - happyIn33- (happy_var_1- )}--happyReduce_77 = happySpecReduce_1 30# happyReduction_77-happyReduction_77 happy_x_1- = case happyOut53 happy_x_1 of { happy_var_1 -> - happyIn34- (reverse happy_var_1- )}--happyReduce_78 = happySpecReduce_1 30# happyReduction_78-happyReduction_78 happy_x_1- = case happyOut46 happy_x_1 of { happy_var_1 -> - happyIn34- ([happy_var_1]- )}--happyReduce_79 = happySpecReduce_0 30# happyReduction_79-happyReduction_79 = happyIn34- ([]- )--happyReduce_80 = happyMonadReduce 3# 31# happyReduction_80-happyReduction_80 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut36 happy_x_2 of { happy_var_2 -> - ( checkRevDecls happy_var_2)}- ) (\r -> happyReturn (happyIn35 r))--happyReduce_81 = happySpecReduce_1 31# happyReduction_81-happyReduction_81 happy_x_1- = happyIn35- ([]- )--happyReduce_82 = happySpecReduce_3 32# happyReduction_82-happyReduction_82 happy_x_3- happy_x_2- happy_x_1- = case happyOut36 happy_x_1 of { happy_var_1 -> - case happyOut37 happy_x_3 of { happy_var_3 -> - happyIn36- (happy_var_3 : happy_var_1- )}}--happyReduce_83 = happySpecReduce_1 32# happyReduction_83-happyReduction_83 happy_x_1- = case happyOut37 happy_x_1 of { happy_var_1 -> - happyIn36- ([happy_var_1]- )}--happyReduce_84 = happySpecReduce_1 33# happyReduction_84-happyReduction_84 happy_x_1- = case happyOut39 happy_x_1 of { happy_var_1 -> - happyIn37- (happy_var_1- )}--happyReduce_85 = happySpecReduce_1 33# happyReduction_85-happyReduction_85 happy_x_1- = case happyOut27 happy_x_1 of { happy_var_1 -> - happyIn37- (happy_var_1- )}--happyReduce_86 = happySpecReduce_1 33# happyReduction_86-happyReduction_86 happy_x_1- = case happyOut82 happy_x_1 of { happy_var_1 -> - happyIn37- (happy_var_1- )}--happyReduce_87 = happySpecReduce_3 34# happyReduction_87-happyReduction_87 happy_x_3- happy_x_2- happy_x_1- = case happyOut35 happy_x_2 of { happy_var_2 -> - happyIn38- (happy_var_2- )}--happyReduce_88 = happySpecReduce_3 34# happyReduction_88-happyReduction_88 happy_x_3- happy_x_2- happy_x_1- = case happyOut35 happy_x_2 of { happy_var_2 -> - happyIn38- (happy_var_2- )}--happyReduce_89 = happyReduce 4# 35# happyReduction_89-happyReduction_89 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut41 happy_x_2 of { happy_var_2 -> - case happyOut51 happy_x_4 of { happy_var_4 -> - happyIn39- (HsTypeSig happy_var_1 (reverse happy_var_2) happy_var_4- ) `HappyStk` happyRest}}}--happyReduce_90 = happySpecReduce_1 36# happyReduction_90-happyReduction_90 happy_x_1- = case happyOut38 happy_x_1 of { happy_var_1 -> - happyIn40- (HsBDecls happy_var_1- )}--happyReduce_91 = happySpecReduce_3 36# happyReduction_91-happyReduction_91 happy_x_3- happy_x_2- happy_x_1- = case happyOut132 happy_x_2 of { happy_var_2 -> - happyIn40- (HsIPBinds happy_var_2- )}--happyReduce_92 = happySpecReduce_3 36# happyReduction_92-happyReduction_92 happy_x_3- happy_x_2- happy_x_1- = case happyOut132 happy_x_2 of { happy_var_2 -> - happyIn40- (HsIPBinds happy_var_2- )}--happyReduce_93 = happySpecReduce_3 37# happyReduction_93-happyReduction_93 happy_x_3- happy_x_2- happy_x_1- = case happyOut41 happy_x_1 of { happy_var_1 -> - case happyOut136 happy_x_3 of { happy_var_3 -> - happyIn41- (happy_var_3 : happy_var_1- )}}--happyReduce_94 = happyMonadReduce 1# 37# happyReduction_94-happyReduction_94 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut138 happy_x_1 of { happy_var_1 -> - ( do { n <- checkUnQual happy_var_1;- return [n] })}- ) (\r -> happyReturn (happyIn41 r))--happyReduce_95 = happySpecReduce_1 38# happyReduction_95-happyReduction_95 happy_x_1- = happyIn42- (StdCall- )--happyReduce_96 = happySpecReduce_1 38# happyReduction_96-happyReduction_96 happy_x_1- = happyIn42- (CCall- )--happyReduce_97 = happySpecReduce_1 39# happyReduction_97-happyReduction_97 happy_x_1- = happyIn43- (PlaySafe False- )--happyReduce_98 = happySpecReduce_1 39# happyReduction_98-happyReduction_98 happy_x_1- = happyIn43- (PlayRisky- )--happyReduce_99 = happySpecReduce_1 39# happyReduction_99-happyReduction_99 happy_x_1- = happyIn43- (PlaySafe True- )--happyReduce_100 = happySpecReduce_0 39# happyReduction_100-happyReduction_100 = happyIn43- (PlaySafe False- )--happyReduce_101 = happyReduce 4# 40# happyReduction_101-happyReduction_101 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { (StringTok happy_var_1) -> - case happyOut137 happy_x_2 of { happy_var_2 -> - case happyOut45 happy_x_4 of { happy_var_4 -> - happyIn44- ((happy_var_1, happy_var_2, happy_var_4)- ) `HappyStk` happyRest}}}--happyReduce_102 = happySpecReduce_3 40# happyReduction_102-happyReduction_102 happy_x_3- happy_x_2- happy_x_1- = case happyOut137 happy_x_1 of { happy_var_1 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - happyIn44- (("", happy_var_1, happy_var_3)- )}}--happyReduce_103 = happySpecReduce_1 41# happyReduction_103-happyReduction_103 happy_x_1- = case happyOut47 happy_x_1 of { happy_var_1 -> - happyIn45- (happy_var_1- )}--happyReduce_104 = happySpecReduce_3 41# happyReduction_104-happyReduction_104 happy_x_3- happy_x_2- happy_x_1- = case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut50 happy_x_2 of { happy_var_2 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - happyIn45- (HsTyInfix happy_var_1 happy_var_2 happy_var_3- )}}}--happyReduce_105 = happySpecReduce_3 41# happyReduction_105-happyReduction_105 happy_x_3- happy_x_2- happy_x_1- = case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut174 happy_x_2 of { happy_var_2 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - happyIn45- (HsTyInfix happy_var_1 happy_var_2 happy_var_3- )}}}--happyReduce_106 = happySpecReduce_3 41# happyReduction_106-happyReduction_106 happy_x_3- happy_x_2- happy_x_1- = case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - happyIn45- (HsTyFun happy_var_1 happy_var_3- )}}--happyReduce_107 = happySpecReduce_3 42# happyReduction_107-happyReduction_107 happy_x_3- happy_x_2- happy_x_1- = case happyOut139 happy_x_1 of { happy_var_1 -> - case happyOut45 happy_x_3 of { happy_var_3 -> - happyIn46- (HsTyPred $ HsIParam happy_var_1 happy_var_3- )}}--happyReduce_108 = happySpecReduce_1 42# happyReduction_108-happyReduction_108 happy_x_1- = case happyOut45 happy_x_1 of { happy_var_1 -> - happyIn46- (happy_var_1- )}--happyReduce_109 = happySpecReduce_2 43# happyReduction_109-happyReduction_109 happy_x_2- happy_x_1- = case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut48 happy_x_2 of { happy_var_2 -> - happyIn47- (HsTyApp happy_var_1 happy_var_2- )}}--happyReduce_110 = happySpecReduce_1 43# happyReduction_110-happyReduction_110 happy_x_1- = case happyOut48 happy_x_1 of { happy_var_1 -> - happyIn47- (happy_var_1- )}--happyReduce_111 = happySpecReduce_1 44# happyReduction_111-happyReduction_111 happy_x_1- = case happyOut49 happy_x_1 of { happy_var_1 -> - happyIn48- (HsTyCon happy_var_1- )}--happyReduce_112 = happySpecReduce_1 44# happyReduction_112-happyReduction_112 happy_x_1- = case happyOut173 happy_x_1 of { happy_var_1 -> - happyIn48- (HsTyVar happy_var_1- )}--happyReduce_113 = happySpecReduce_3 44# happyReduction_113-happyReduction_113 happy_x_3- happy_x_2- happy_x_1- = case happyOut53 happy_x_2 of { happy_var_2 -> - happyIn48- (HsTyTuple Boxed (reverse happy_var_2)- )}--happyReduce_114 = happySpecReduce_3 44# happyReduction_114-happyReduction_114 happy_x_3- happy_x_2- happy_x_1- = case happyOut54 happy_x_2 of { happy_var_2 -> - happyIn48- (HsTyTuple Unboxed (reverse happy_var_2)- )}--happyReduce_115 = happySpecReduce_3 44# happyReduction_115-happyReduction_115 happy_x_3- happy_x_2- happy_x_1- = case happyOut46 happy_x_2 of { happy_var_2 -> - happyIn48- (HsTyApp list_tycon happy_var_2- )}--happyReduce_116 = happySpecReduce_3 44# happyReduction_116-happyReduction_116 happy_x_3- happy_x_2- happy_x_1- = case happyOut51 happy_x_2 of { happy_var_2 -> - happyIn48- (happy_var_2- )}--happyReduce_117 = happySpecReduce_1 45# happyReduction_117-happyReduction_117 happy_x_1- = case happyOut155 happy_x_1 of { happy_var_1 -> - happyIn49- (happy_var_1- )}--happyReduce_118 = happySpecReduce_2 45# happyReduction_118-happyReduction_118 happy_x_2- happy_x_1- = happyIn49- (unit_tycon_name- )--happyReduce_119 = happySpecReduce_3 45# happyReduction_119-happyReduction_119 happy_x_3- happy_x_2- happy_x_1- = happyIn49- (fun_tycon_name- )--happyReduce_120 = happySpecReduce_2 45# happyReduction_120-happyReduction_120 happy_x_2- happy_x_1- = happyIn49- (list_tycon_name- )--happyReduce_121 = happySpecReduce_3 45# happyReduction_121-happyReduction_121 happy_x_3- happy_x_2- happy_x_1- = case happyOut101 happy_x_2 of { happy_var_2 -> - happyIn49- (tuple_tycon_name happy_var_2- )}--happyReduce_122 = happySpecReduce_1 46# happyReduction_122-happyReduction_122 happy_x_1- = case happyOut146 happy_x_1 of { happy_var_1 -> - happyIn50- (happy_var_1- )}--happyReduce_123 = happyReduce 4# 47# happyReduction_123-happyReduction_123 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut56 happy_x_2 of { happy_var_2 -> - case happyOut51 happy_x_4 of { happy_var_4 -> - happyIn51- (mkHsTyForall (Just happy_var_2) [] happy_var_4- ) `HappyStk` happyRest}}--happyReduce_124 = happySpecReduce_3 47# happyReduction_124-happyReduction_124 happy_x_3- happy_x_2- happy_x_1- = case happyOut52 happy_x_1 of { happy_var_1 -> - case happyOut46 happy_x_3 of { happy_var_3 -> - happyIn51- (mkHsTyForall Nothing happy_var_1 happy_var_3- )}}--happyReduce_125 = happySpecReduce_1 47# happyReduction_125-happyReduction_125 happy_x_1- = case happyOut46 happy_x_1 of { happy_var_1 -> - happyIn51- (happy_var_1- )}--happyReduce_126 = happyMonadReduce 1# 48# happyReduction_126-happyReduction_126 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - ( checkContext happy_var_1)}- ) (\r -> happyReturn (happyIn52 r))--happyReduce_127 = happySpecReduce_3 49# happyReduction_127-happyReduction_127 happy_x_3- happy_x_2- happy_x_1- = case happyOut54 happy_x_1 of { happy_var_1 -> - case happyOut46 happy_x_3 of { happy_var_3 -> - happyIn53- (happy_var_3 : happy_var_1- )}}--happyReduce_128 = happySpecReduce_1 50# happyReduction_128-happyReduction_128 happy_x_1- = case happyOut46 happy_x_1 of { happy_var_1 -> - happyIn54- ([happy_var_1]- )}--happyReduce_129 = happySpecReduce_3 50# happyReduction_129-happyReduction_129 happy_x_3- happy_x_2- happy_x_1- = case happyOut54 happy_x_1 of { happy_var_1 -> - case happyOut46 happy_x_3 of { happy_var_3 -> - happyIn54- (happy_var_3 : happy_var_1- )}}--happyReduce_130 = happySpecReduce_2 51# happyReduction_130-happyReduction_130 happy_x_2- happy_x_1- = case happyOut170 happy_x_1 of { happy_var_1 -> - case happyOut56 happy_x_2 of { happy_var_2 -> - happyIn55- ((happy_var_1,reverse happy_var_2)- )}}--happyReduce_131 = happySpecReduce_2 52# happyReduction_131-happyReduction_131 happy_x_2- happy_x_1- = case happyOut56 happy_x_1 of { happy_var_1 -> - case happyOut173 happy_x_2 of { happy_var_2 -> - happyIn56- (happy_var_2 : happy_var_1- )}}--happyReduce_132 = happySpecReduce_0 52# happyReduction_132-happyReduction_132 = happyIn56- ([]- )--happyReduce_133 = happySpecReduce_0 53# happyReduction_133-happyReduction_133 = happyIn57- ([]- )--happyReduce_134 = happySpecReduce_2 53# happyReduction_134-happyReduction_134 happy_x_2- happy_x_1- = case happyOut58 happy_x_2 of { happy_var_2 -> - happyIn57- (reverse happy_var_2- )}--happyReduce_135 = happySpecReduce_3 54# happyReduction_135-happyReduction_135 happy_x_3- happy_x_2- happy_x_1- = case happyOut58 happy_x_1 of { happy_var_1 -> - case happyOut59 happy_x_3 of { happy_var_3 -> - happyIn58- (happy_var_3 : happy_var_1- )}}--happyReduce_136 = happySpecReduce_1 54# happyReduction_136-happyReduction_136 happy_x_1- = case happyOut59 happy_x_1 of { happy_var_1 -> - happyIn58- ([happy_var_1]- )}--happyReduce_137 = happySpecReduce_3 55# happyReduction_137-happyReduction_137 happy_x_3- happy_x_2- happy_x_1- = case happyOut56 happy_x_1 of { happy_var_1 -> - case happyOut56 happy_x_3 of { happy_var_3 -> - happyIn59- (HsFunDep (reverse happy_var_1) (reverse happy_var_3)- )}}--happyReduce_138 = happySpecReduce_3 56# happyReduction_138-happyReduction_138 happy_x_3- happy_x_2- happy_x_1- = case happyOut61 happy_x_2 of { happy_var_2 -> - happyIn60- (happy_var_2- )}--happyReduce_139 = happySpecReduce_3 56# happyReduction_139-happyReduction_139 happy_x_3- happy_x_2- happy_x_1- = case happyOut61 happy_x_2 of { happy_var_2 -> - happyIn60- (happy_var_2- )}--happyReduce_140 = happySpecReduce_3 57# happyReduction_140-happyReduction_140 happy_x_3- happy_x_2- happy_x_1- = case happyOut62 happy_x_2 of { happy_var_2 -> - happyIn61- (happy_var_2- )}--happyReduce_141 = happySpecReduce_3 58# happyReduction_141-happyReduction_141 happy_x_3- happy_x_2- happy_x_1- = case happyOut62 happy_x_1 of { happy_var_1 -> - case happyOut63 happy_x_3 of { happy_var_3 -> - happyIn62- (happy_var_3 : happy_var_1- )}}--happyReduce_142 = happySpecReduce_1 58# happyReduction_142-happyReduction_142 happy_x_1- = case happyOut63 happy_x_1 of { happy_var_1 -> - happyIn62- ([happy_var_1]- )}--happyReduce_143 = happyMonadReduce 4# 59# happyReduction_143-happyReduction_143 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut141 happy_x_2 of { happy_var_2 -> - case happyOut51 happy_x_4 of { happy_var_4 -> - ( do { c <- checkUnQual happy_var_2;- return $ HsGadtDecl happy_var_1 c happy_var_4 })}}}- ) (\r -> happyReturn (happyIn63 r))--happyReduce_144 = happySpecReduce_0 60# happyReduction_144-happyReduction_144 = happyIn64- ([]- )--happyReduce_145 = happySpecReduce_2 60# happyReduction_145-happyReduction_145 happy_x_2- happy_x_1- = case happyOut65 happy_x_2 of { happy_var_2 -> - happyIn64- (happy_var_2- )}--happyReduce_146 = happySpecReduce_3 61# happyReduction_146-happyReduction_146 happy_x_3- happy_x_2- happy_x_1- = case happyOut65 happy_x_1 of { happy_var_1 -> - case happyOut66 happy_x_3 of { happy_var_3 -> - happyIn65- (happy_var_3 : happy_var_1- )}}--happyReduce_147 = happySpecReduce_1 61# happyReduction_147-happyReduction_147 happy_x_1- = case happyOut66 happy_x_1 of { happy_var_1 -> - happyIn65- ([happy_var_1]- )}--happyReduce_148 = happyReduce 5# 62# happyReduction_148-happyReduction_148 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut67 happy_x_2 of { happy_var_2 -> - case happyOut52 happy_x_3 of { happy_var_3 -> - case happyOut68 happy_x_5 of { happy_var_5 -> - happyIn66- (HsQualConDecl happy_var_1 happy_var_2 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}}--happyReduce_149 = happySpecReduce_3 62# happyReduction_149-happyReduction_149 happy_x_3- happy_x_2- happy_x_1- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut67 happy_x_2 of { happy_var_2 -> - case happyOut68 happy_x_3 of { happy_var_3 -> - happyIn66- (HsQualConDecl happy_var_1 happy_var_2 [] happy_var_3- )}}}--happyReduce_150 = happySpecReduce_3 63# happyReduction_150-happyReduction_150 happy_x_3- happy_x_2- happy_x_1- = case happyOut56 happy_x_2 of { happy_var_2 -> - happyIn67- (happy_var_2- )}--happyReduce_151 = happySpecReduce_0 63# happyReduction_151-happyReduction_151 = happyIn67- ([]- )--happyReduce_152 = happySpecReduce_1 64# happyReduction_152-happyReduction_152 happy_x_1- = case happyOut69 happy_x_1 of { happy_var_1 -> - happyIn68- (HsConDecl (fst happy_var_1) (snd happy_var_1)- )}--happyReduce_153 = happySpecReduce_3 64# happyReduction_153-happyReduction_153 happy_x_3- happy_x_2- happy_x_1- = case happyOut72 happy_x_1 of { happy_var_1 -> - case happyOut145 happy_x_2 of { happy_var_2 -> - case happyOut72 happy_x_3 of { happy_var_3 -> - happyIn68- (HsConDecl happy_var_2 [happy_var_1,happy_var_3]- )}}}--happyReduce_154 = happySpecReduce_3 64# happyReduction_154-happyReduction_154 happy_x_3- happy_x_2- happy_x_1- = case happyOut140 happy_x_1 of { happy_var_1 -> - happyIn68- (HsRecDecl happy_var_1 []- )}--happyReduce_155 = happyReduce 4# 64# happyReduction_155-happyReduction_155 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut140 happy_x_1 of { happy_var_1 -> - case happyOut73 happy_x_3 of { happy_var_3 -> - happyIn68- (HsRecDecl happy_var_1 (reverse happy_var_3)- ) `HappyStk` happyRest}}--happyReduce_156 = happyMonadReduce 1# 65# happyReduction_156-happyReduction_156 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - ( do { (c,ts) <- splitTyConApp happy_var_1;- return (c,map HsUnBangedTy ts) })}- ) (\r -> happyReturn (happyIn69 r))--happyReduce_157 = happySpecReduce_1 65# happyReduction_157-happyReduction_157 happy_x_1- = case happyOut70 happy_x_1 of { happy_var_1 -> - happyIn69- (happy_var_1- )}--happyReduce_158 = happyMonadReduce 3# 66# happyReduction_158-happyReduction_158 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> - case happyOut48 happy_x_3 of { happy_var_3 -> - ( do { (c,ts) <- splitTyConApp happy_var_1;- return (c,map HsUnBangedTy ts++- [HsBangedTy happy_var_3]) })}}- ) (\r -> happyReturn (happyIn70 r))--happyReduce_159 = happySpecReduce_2 66# happyReduction_159-happyReduction_159 happy_x_2- happy_x_1- = case happyOut70 happy_x_1 of { happy_var_1 -> - case happyOut71 happy_x_2 of { happy_var_2 -> - happyIn70- ((fst happy_var_1, snd happy_var_1 ++ [happy_var_2] )- )}}--happyReduce_160 = happySpecReduce_1 67# happyReduction_160-happyReduction_160 happy_x_1- = case happyOut48 happy_x_1 of { happy_var_1 -> - happyIn71- (HsUnBangedTy happy_var_1- )}--happyReduce_161 = happySpecReduce_2 67# happyReduction_161-happyReduction_161 happy_x_2- happy_x_1- = case happyOut48 happy_x_2 of { happy_var_2 -> - happyIn71- (HsBangedTy happy_var_2- )}--happyReduce_162 = happySpecReduce_1 68# happyReduction_162-happyReduction_162 happy_x_1- = case happyOut47 happy_x_1 of { happy_var_1 -> - happyIn72- (HsUnBangedTy happy_var_1- )}--happyReduce_163 = happySpecReduce_2 68# happyReduction_163-happyReduction_163 happy_x_2- happy_x_1- = case happyOut48 happy_x_2 of { happy_var_2 -> - happyIn72- (HsBangedTy happy_var_2- )}--happyReduce_164 = happySpecReduce_3 69# happyReduction_164-happyReduction_164 happy_x_3- happy_x_2- happy_x_1- = case happyOut73 happy_x_1 of { happy_var_1 -> - case happyOut74 happy_x_3 of { happy_var_3 -> - happyIn73- (happy_var_3 : happy_var_1- )}}--happyReduce_165 = happySpecReduce_1 69# happyReduction_165-happyReduction_165 happy_x_1- = case happyOut74 happy_x_1 of { happy_var_1 -> - happyIn73- ([happy_var_1]- )}--happyReduce_166 = happySpecReduce_3 70# happyReduction_166-happyReduction_166 happy_x_3- happy_x_2- happy_x_1- = case happyOut41 happy_x_1 of { happy_var_1 -> - case happyOut75 happy_x_3 of { happy_var_3 -> - happyIn74- ((reverse happy_var_1, happy_var_3)- )}}--happyReduce_167 = happySpecReduce_1 71# happyReduction_167-happyReduction_167 happy_x_1- = case happyOut51 happy_x_1 of { happy_var_1 -> - happyIn75- (HsUnBangedTy happy_var_1- )}--happyReduce_168 = happySpecReduce_2 71# happyReduction_168-happyReduction_168 happy_x_2- happy_x_1- = case happyOut48 happy_x_2 of { happy_var_2 -> - happyIn75- (HsBangedTy happy_var_2- )}--happyReduce_169 = happySpecReduce_0 72# happyReduction_169-happyReduction_169 = happyIn76- ([]- )--happyReduce_170 = happySpecReduce_2 72# happyReduction_170-happyReduction_170 happy_x_2- happy_x_1- = case happyOut172 happy_x_2 of { happy_var_2 -> - happyIn76- ([happy_var_2]- )}--happyReduce_171 = happySpecReduce_3 72# happyReduction_171-happyReduction_171 happy_x_3- happy_x_2- happy_x_1- = happyIn76- ([]- )--happyReduce_172 = happyReduce 4# 72# happyReduction_172-happyReduction_172 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut77 happy_x_3 of { happy_var_3 -> - happyIn76- (reverse happy_var_3- ) `HappyStk` happyRest}--happyReduce_173 = happySpecReduce_3 73# happyReduction_173-happyReduction_173 happy_x_3- happy_x_2- happy_x_1- = case happyOut77 happy_x_1 of { happy_var_1 -> - case happyOut172 happy_x_3 of { happy_var_3 -> - happyIn77- (happy_var_3 : happy_var_1- )}}--happyReduce_174 = happySpecReduce_1 73# happyReduction_174-happyReduction_174 happy_x_1- = case happyOut172 happy_x_1 of { happy_var_1 -> - happyIn77- ([happy_var_1]- )}--happyReduce_175 = happyMonadReduce 2# 74# happyReduction_175-happyReduction_175 (happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut38 happy_x_2 of { happy_var_2 -> - ( checkClassBody happy_var_2)}- ) (\r -> happyReturn (happyIn78 r))--happyReduce_176 = happySpecReduce_0 74# happyReduction_176-happyReduction_176 = happyIn78- ([]- )--happyReduce_177 = happyMonadReduce 4# 75# happyReduction_177-happyReduction_177 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut80 happy_x_3 of { happy_var_3 -> - ( checkClassBody happy_var_3)}- ) (\r -> happyReturn (happyIn79 r))--happyReduce_178 = happyMonadReduce 4# 75# happyReduction_178-happyReduction_178 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut80 happy_x_3 of { happy_var_3 -> - ( checkClassBody happy_var_3)}- ) (\r -> happyReturn (happyIn79 r))--happyReduce_179 = happySpecReduce_0 75# happyReduction_179-happyReduction_179 = happyIn79- ([]- )--happyReduce_180 = happyMonadReduce 3# 76# happyReduction_180-happyReduction_180 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut81 happy_x_2 of { happy_var_2 -> - ( checkRevDecls happy_var_2)}- ) (\r -> happyReturn (happyIn80 r))--happyReduce_181 = happySpecReduce_1 76# happyReduction_181-happyReduction_181 happy_x_1- = happyIn80- ([]- )--happyReduce_182 = happySpecReduce_3 77# happyReduction_182-happyReduction_182 happy_x_3- happy_x_2- happy_x_1- = case happyOut81 happy_x_1 of { happy_var_1 -> - case happyOut82 happy_x_3 of { happy_var_3 -> - happyIn81- (happy_var_3 : happy_var_1- )}}--happyReduce_183 = happySpecReduce_1 77# happyReduction_183-happyReduction_183 happy_x_1- = case happyOut82 happy_x_1 of { happy_var_1 -> - happyIn81- ([happy_var_1]- )}--happyReduce_184 = happyMonadReduce 4# 78# happyReduction_184-happyReduction_184 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut90 happy_x_2 of { happy_var_2 -> - case happyOut84 happy_x_3 of { happy_var_3 -> - case happyOut83 happy_x_4 of { happy_var_4 -> - ( checkValDef happy_var_1 happy_var_2 happy_var_3 happy_var_4)}}}}- ) (\r -> happyReturn (happyIn82 r))--happyReduce_185 = happySpecReduce_2 79# happyReduction_185-happyReduction_185 happy_x_2- happy_x_1- = case happyOut40 happy_x_2 of { happy_var_2 -> - happyIn83- (happy_var_2- )}--happyReduce_186 = happySpecReduce_0 79# happyReduction_186-happyReduction_186 = happyIn83- (HsBDecls []- )--happyReduce_187 = happyMonadReduce 2# 80# happyReduction_187-happyReduction_187 (happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut87 happy_x_2 of { happy_var_2 -> - ( do { e <- checkExpr happy_var_2;- return (HsUnGuardedRhs e) })}- ) (\r -> happyReturn (happyIn84 r))--happyReduce_188 = happySpecReduce_1 80# happyReduction_188-happyReduction_188 happy_x_1- = case happyOut85 happy_x_1 of { happy_var_1 -> - happyIn84- (HsGuardedRhss (reverse happy_var_1)- )}--happyReduce_189 = happySpecReduce_2 81# happyReduction_189-happyReduction_189 happy_x_2- happy_x_1- = case happyOut85 happy_x_1 of { happy_var_1 -> - case happyOut86 happy_x_2 of { happy_var_2 -> - happyIn85- (happy_var_2 : happy_var_1- )}}--happyReduce_190 = happySpecReduce_1 81# happyReduction_190-happyReduction_190 happy_x_1- = case happyOut86 happy_x_1 of { happy_var_1 -> - happyIn85- ([happy_var_1]- )}--happyReduce_191 = happyMonadReduce 5# 82# happyReduction_191-happyReduction_191 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut117 happy_x_3 of { happy_var_3 -> - case happyOut87 happy_x_5 of { happy_var_5 -> - ( do { e <- checkExpr happy_var_5;- return (HsGuardedRhs happy_var_1 (reverse happy_var_3) e) })}}}- ) (\r -> happyReturn (happyIn86 r))--happyReduce_192 = happyReduce 4# 83# happyReduction_192-happyReduction_192 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut90 happy_x_1 of { happy_var_1 -> - case happyOut165 happy_x_3 of { happy_var_3 -> - case happyOut51 happy_x_4 of { happy_var_4 -> - happyIn87- (HsExpTypeSig happy_var_3 happy_var_1 happy_var_4- ) `HappyStk` happyRest}}}--happyReduce_193 = happySpecReduce_3 83# happyReduction_193-happyReduction_193 happy_x_3- happy_x_2- happy_x_1- = case happyOut90 happy_x_1 of { happy_var_1 -> - case happyOut131 happy_x_3 of { happy_var_3 -> - happyIn87- (HsWith happy_var_1 happy_var_3- )}}--happyReduce_194 = happySpecReduce_1 83# happyReduction_194-happyReduction_194 happy_x_1- = case happyOut88 happy_x_1 of { happy_var_1 -> - happyIn87- (happy_var_1- )}--happyReduce_195 = happySpecReduce_1 84# happyReduction_195-happyReduction_195 happy_x_1- = case happyOut89 happy_x_1 of { happy_var_1 -> - happyIn88- (happy_var_1- )}--happyReduce_196 = happySpecReduce_1 84# happyReduction_196-happyReduction_196 happy_x_1- = case happyOut90 happy_x_1 of { happy_var_1 -> - happyIn88- (happy_var_1- )}--happyReduce_197 = happySpecReduce_3 85# happyReduction_197-happyReduction_197 happy_x_3- happy_x_2- happy_x_1- = case happyOut90 happy_x_1 of { happy_var_1 -> - case happyOut148 happy_x_2 of { happy_var_2 -> - case happyOut91 happy_x_3 of { happy_var_3 -> - happyIn89- (HsInfixApp happy_var_1 happy_var_2 happy_var_3- )}}}--happyReduce_198 = happySpecReduce_1 85# happyReduction_198-happyReduction_198 happy_x_1- = case happyOut91 happy_x_1 of { happy_var_1 -> - happyIn89- (happy_var_1- )}--happyReduce_199 = happySpecReduce_3 86# happyReduction_199-happyReduction_199 happy_x_3- happy_x_2- happy_x_1- = case happyOut90 happy_x_1 of { happy_var_1 -> - case happyOut148 happy_x_2 of { happy_var_2 -> - case happyOut92 happy_x_3 of { happy_var_3 -> - happyIn90- (HsInfixApp happy_var_1 happy_var_2 happy_var_3- )}}}--happyReduce_200 = happySpecReduce_1 86# happyReduction_200-happyReduction_200 happy_x_1- = case happyOut114 happy_x_1 of { happy_var_1 -> - happyIn90- (happy_var_1- )}--happyReduce_201 = happySpecReduce_1 86# happyReduction_201-happyReduction_201 happy_x_1- = case happyOut92 happy_x_1 of { happy_var_1 -> - happyIn90- (happy_var_1- )}--happyReduce_202 = happyReduce 5# 87# happyReduction_202-happyReduction_202 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_2 of { happy_var_2 -> - case happyOut94 happy_x_3 of { happy_var_3 -> - case happyOut87 happy_x_5 of { happy_var_5 -> - happyIn91- (HsLambda happy_var_2 (reverse happy_var_3) happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_203 = happyReduce 4# 87# happyReduction_203-happyReduction_203 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut40 happy_x_2 of { happy_var_2 -> - case happyOut87 happy_x_4 of { happy_var_4 -> - happyIn91- (HsLet happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_204 = happyReduce 4# 87# happyReduction_204-happyReduction_204 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut131 happy_x_2 of { happy_var_2 -> - case happyOut87 happy_x_4 of { happy_var_4 -> - happyIn91- (HsDLet happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_205 = happyReduce 6# 87# happyReduction_205-happyReduction_205 (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 happyOut87 happy_x_2 of { happy_var_2 -> - case happyOut87 happy_x_4 of { happy_var_4 -> - case happyOut87 happy_x_6 of { happy_var_6 -> - happyIn91- (HsIf happy_var_2 happy_var_4 happy_var_6- ) `HappyStk` happyRest}}}--happyReduce_206 = happyReduce 4# 88# happyReduction_206-happyReduction_206 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut87 happy_x_2 of { happy_var_2 -> - case happyOut119 happy_x_4 of { happy_var_4 -> - happyIn92- (HsCase happy_var_2 happy_var_4- ) `HappyStk` happyRest}}--happyReduce_207 = happySpecReduce_2 88# happyReduction_207-happyReduction_207 happy_x_2- happy_x_1- = case happyOut93 happy_x_2 of { happy_var_2 -> - happyIn92- (HsNegApp happy_var_2- )}--happyReduce_208 = happySpecReduce_2 88# happyReduction_208-happyReduction_208 happy_x_2- happy_x_1- = case happyOut127 happy_x_2 of { happy_var_2 -> - happyIn92- (HsDo happy_var_2- )}--happyReduce_209 = happySpecReduce_2 88# happyReduction_209-happyReduction_209 happy_x_2- happy_x_1- = case happyOut127 happy_x_2 of { happy_var_2 -> - happyIn92- (HsMDo happy_var_2- )}--happyReduce_210 = happySpecReduce_1 88# happyReduction_210-happyReduction_210 happy_x_1- = case happyOut99 happy_x_1 of { happy_var_1 -> - happyIn92- (HsReifyExp happy_var_1- )}--happyReduce_211 = happySpecReduce_1 88# happyReduction_211-happyReduction_211 happy_x_1- = case happyOut93 happy_x_1 of { happy_var_1 -> - happyIn92- (happy_var_1- )}--happyReduce_212 = happySpecReduce_2 89# happyReduction_212-happyReduction_212 happy_x_2- happy_x_1- = case happyOut93 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_2 of { happy_var_2 -> - happyIn93- (HsApp happy_var_1 happy_var_2- )}}--happyReduce_213 = happySpecReduce_1 89# happyReduction_213-happyReduction_213 happy_x_1- = case happyOut96 happy_x_1 of { happy_var_1 -> - happyIn93- (happy_var_1- )}--happyReduce_214 = happySpecReduce_2 90# happyReduction_214-happyReduction_214 happy_x_2- happy_x_1- = case happyOut94 happy_x_1 of { happy_var_1 -> - case happyOut95 happy_x_2 of { happy_var_2 -> - happyIn94- (happy_var_2 : happy_var_1- )}}--happyReduce_215 = happySpecReduce_1 90# happyReduction_215-happyReduction_215 happy_x_1- = case happyOut95 happy_x_1 of { happy_var_1 -> - happyIn94- ([happy_var_1]- )}--happyReduce_216 = happyMonadReduce 1# 91# happyReduction_216-happyReduction_216 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut96 happy_x_1 of { happy_var_1 -> - ( checkPattern happy_var_1)}- ) (\r -> happyReturn (happyIn95 r))--happyReduce_217 = happyMonadReduce 3# 92# happyReduction_217-happyReduction_217 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_3 of { happy_var_3 -> - ( do { n <- checkUnQual happy_var_1;- return (HsAsPat n happy_var_3) })}}- ) (\r -> happyReturn (happyIn96 r))--happyReduce_218 = happyMonadReduce 3# 92# happyReduction_218-happyReduction_218 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_3 of { happy_var_3 -> - ( do { n <- checkUnQual happy_var_1;- return (HsCAsRP n happy_var_3) })}}- ) (\r -> happyReturn (happyIn96 r))--happyReduce_219 = happySpecReduce_2 92# happyReduction_219-happyReduction_219 happy_x_2- happy_x_1- = case happyOut96 happy_x_2 of { happy_var_2 -> - happyIn96- (HsIrrPat happy_var_2- )}--happyReduce_220 = happySpecReduce_1 92# happyReduction_220-happyReduction_220 happy_x_1- = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn96- (happy_var_1- )}--happyReduce_221 = happyMonadReduce 3# 93# happyReduction_221-happyReduction_221 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut97 happy_x_1 of { happy_var_1 -> - ( mkRecConstrOrUpdate happy_var_1 [])}- ) (\r -> happyReturn (happyIn97 r))--happyReduce_222 = happyMonadReduce 4# 93# happyReduction_222-happyReduction_222 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut97 happy_x_1 of { happy_var_1 -> - case happyOut129 happy_x_3 of { happy_var_3 -> - ( mkRecConstrOrUpdate happy_var_1 (reverse happy_var_3))}}- ) (\r -> happyReturn (happyIn97 r))--happyReduce_223 = happySpecReduce_2 93# happyReduction_223-happyReduction_223 happy_x_2- happy_x_1- = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn97- (HsStarRP happy_var_1- )}--happyReduce_224 = happySpecReduce_2 93# happyReduction_224-happyReduction_224 happy_x_2- happy_x_1- = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn97- (HsStarGRP happy_var_1- )}--happyReduce_225 = happySpecReduce_2 93# happyReduction_225-happyReduction_225 happy_x_2- happy_x_1- = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn97- (HsPlusRP happy_var_1- )}--happyReduce_226 = happySpecReduce_2 93# happyReduction_226-happyReduction_226 happy_x_2- happy_x_1- = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn97- (HsPlusGRP happy_var_1- )}--happyReduce_227 = happySpecReduce_2 93# happyReduction_227-happyReduction_227 happy_x_2- happy_x_1- = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn97- (HsOptRP happy_var_1- )}--happyReduce_228 = happySpecReduce_2 93# happyReduction_228-happyReduction_228 happy_x_2- happy_x_1- = case happyOut97 happy_x_1 of { happy_var_1 -> - happyIn97- (HsOptGRP happy_var_1- )}--happyReduce_229 = happySpecReduce_1 93# happyReduction_229-happyReduction_229 happy_x_1- = case happyOut98 happy_x_1 of { happy_var_1 -> - happyIn97- (happy_var_1- )}--happyReduce_230 = happySpecReduce_1 94# happyReduction_230-happyReduction_230 happy_x_1- = case happyOut139 happy_x_1 of { happy_var_1 -> - happyIn98- (HsIPVar happy_var_1- )}--happyReduce_231 = happySpecReduce_1 94# happyReduction_231-happyReduction_231 happy_x_1- = case happyOut138 happy_x_1 of { happy_var_1 -> - happyIn98- (HsVar happy_var_1- )}--happyReduce_232 = happySpecReduce_1 94# happyReduction_232-happyReduction_232 happy_x_1- = case happyOut135 happy_x_1 of { happy_var_1 -> - happyIn98- (happy_var_1- )}--happyReduce_233 = happySpecReduce_1 94# happyReduction_233-happyReduction_233 happy_x_1- = case happyOut164 happy_x_1 of { happy_var_1 -> - happyIn98- (HsLit happy_var_1- )}--happyReduce_234 = happySpecReduce_3 94# happyReduction_234-happyReduction_234 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_2 of { happy_var_2 -> - happyIn98- (HsParen happy_var_2- )}--happyReduce_235 = happySpecReduce_3 94# happyReduction_235-happyReduction_235 happy_x_3- happy_x_2- happy_x_1- = case happyOut102 happy_x_2 of { happy_var_2 -> - happyIn98- (HsTuple (reverse happy_var_2)- )}--happyReduce_236 = happySpecReduce_3 94# happyReduction_236-happyReduction_236 happy_x_3- happy_x_2- happy_x_1- = case happyOut115 happy_x_2 of { happy_var_2 -> - happyIn98- (happy_var_2- )}--happyReduce_237 = happyReduce 4# 94# happyReduction_237-happyReduction_237 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut90 happy_x_2 of { happy_var_2 -> - case happyOut148 happy_x_3 of { happy_var_3 -> - happyIn98- (HsLeftSection happy_var_2 happy_var_3- ) `HappyStk` happyRest}}--happyReduce_238 = happyReduce 4# 94# happyReduction_238-happyReduction_238 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut149 happy_x_2 of { happy_var_2 -> - case happyOut88 happy_x_3 of { happy_var_3 -> - happyIn98- (HsRightSection happy_var_2 happy_var_3- ) `HappyStk` happyRest}}--happyReduce_239 = happySpecReduce_1 94# happyReduction_239-happyReduction_239 happy_x_1- = happyIn98- (HsWildCard- )--happyReduce_240 = happySpecReduce_3 94# happyReduction_240-happyReduction_240 happy_x_3- happy_x_2- happy_x_1- = case happyOut105 happy_x_2 of { happy_var_2 -> - happyIn98- (happy_var_2- )}--happyReduce_241 = happySpecReduce_3 94# happyReduction_241-happyReduction_241 happy_x_3- happy_x_2- happy_x_1- = case happyOut103 happy_x_2 of { happy_var_2 -> - happyIn98- (HsSeqRP $ reverse happy_var_2- )}--happyReduce_242 = happyReduce 4# 94# happyReduction_242-happyReduction_242 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut103 happy_x_3 of { happy_var_3 -> - happyIn98- (HsRPats happy_var_1 $ reverse happy_var_3- ) `HappyStk` happyRest}}--happyReduce_243 = happySpecReduce_1 94# happyReduction_243-happyReduction_243 happy_x_1- = case happyOut106 happy_x_1 of { happy_var_1 -> - happyIn98- (happy_var_1- )}--happyReduce_244 = happySpecReduce_1 94# happyReduction_244-happyReduction_244 happy_x_1- = case happyOutTok happy_x_1 of { (THIdEscape happy_var_1) -> - happyIn98- (HsSpliceExp $ HsIdSplice happy_var_1- )}--happyReduce_245 = happyMonadReduce 3# 94# happyReduction_245-happyReduction_245 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut87 happy_x_2 of { happy_var_2 -> - ( do { e <- checkExpr happy_var_2;- return $ HsSpliceExp $ HsParenSplice e })}- ) (\r -> happyReturn (happyIn98 r))--happyReduce_246 = happyMonadReduce 3# 94# happyReduction_246-happyReduction_246 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut87 happy_x_2 of { happy_var_2 -> - ( do { e <- checkExpr happy_var_2;- return $ HsBracketExp $ HsExpBracket e })}- ) (\r -> happyReturn (happyIn98 r))--happyReduce_247 = happyMonadReduce 3# 94# happyReduction_247-happyReduction_247 (happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut88 happy_x_2 of { happy_var_2 -> - ( do { p <- checkPattern happy_var_2;- return $ HsBracketExp $ HsPatBracket p })}- ) (\r -> happyReturn (happyIn98 r))--happyReduce_248 = happySpecReduce_3 94# happyReduction_248-happyReduction_248 happy_x_3- happy_x_2- happy_x_1- = case happyOut51 happy_x_2 of { happy_var_2 -> - happyIn98- (HsBracketExp $ HsTypeBracket happy_var_2- )}--happyReduce_249 = happyReduce 5# 94# happyReduction_249-happyReduction_249 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut31 happy_x_3 of { happy_var_3 -> - happyIn98- (HsBracketExp $ HsDeclBracket happy_var_3- ) `HappyStk` happyRest}--happyReduce_250 = happySpecReduce_2 95# happyReduction_250-happyReduction_250 happy_x_2- happy_x_1- = case happyOut49 happy_x_2 of { happy_var_2 -> - happyIn99- (HsReifyDecl happy_var_2- )}--happyReduce_251 = happySpecReduce_2 95# happyReduction_251-happyReduction_251 happy_x_2- happy_x_1- = case happyOut138 happy_x_2 of { happy_var_2 -> - happyIn99- (HsReifyDecl happy_var_2- )}--happyReduce_252 = happySpecReduce_2 95# happyReduction_252-happyReduction_252 happy_x_2- happy_x_1- = case happyOut100 happy_x_2 of { happy_var_2 -> - happyIn99- (HsReifyType happy_var_2- )}--happyReduce_253 = happySpecReduce_2 95# happyReduction_253-happyReduction_253 happy_x_2- happy_x_1- = case happyOut100 happy_x_2 of { happy_var_2 -> - happyIn99- (HsReifyFixity happy_var_2- )}--happyReduce_254 = happySpecReduce_1 96# happyReduction_254-happyReduction_254 happy_x_1- = case happyOut138 happy_x_1 of { happy_var_1 -> - happyIn100- (happy_var_1- )}--happyReduce_255 = happyMonadReduce 1# 96# happyReduction_255-happyReduction_255 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut135 happy_x_1 of { happy_var_1 -> - ( getGConName happy_var_1)}- ) (\r -> happyReturn (happyIn100 r))--happyReduce_256 = happySpecReduce_2 97# happyReduction_256-happyReduction_256 happy_x_2- happy_x_1- = case happyOut101 happy_x_1 of { happy_var_1 -> - happyIn101- (happy_var_1 + 1- )}--happyReduce_257 = happySpecReduce_1 97# happyReduction_257-happyReduction_257 happy_x_1- = happyIn101- (1- )--happyReduce_258 = happySpecReduce_3 98# happyReduction_258-happyReduction_258 happy_x_3- happy_x_2- happy_x_1- = case happyOut102 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn102- (happy_var_3 : happy_var_1- )}}--happyReduce_259 = happySpecReduce_3 98# happyReduction_259-happyReduction_259 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn102- ([happy_var_3,happy_var_1]- )}}--happyReduce_260 = happySpecReduce_3 99# happyReduction_260-happyReduction_260 happy_x_3- happy_x_2- happy_x_1- = case happyOut103 happy_x_1 of { happy_var_1 -> - case happyOut104 happy_x_3 of { happy_var_3 -> - happyIn103- (happy_var_3 : happy_var_1- )}}--happyReduce_261 = happySpecReduce_1 99# happyReduction_261-happyReduction_261 happy_x_1- = case happyOut104 happy_x_1 of { happy_var_1 -> - happyIn103- ([happy_var_1]- )}--happyReduce_262 = happySpecReduce_1 100# happyReduction_262-happyReduction_262 happy_x_1- = case happyOut105 happy_x_1 of { happy_var_1 -> - happyIn104- (happy_var_1- )}--happyReduce_263 = happySpecReduce_1 100# happyReduction_263-happyReduction_263 happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - happyIn104- (happy_var_1- )}--happyReduce_264 = happySpecReduce_3 101# happyReduction_264-happyReduction_264 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut105 happy_x_3 of { happy_var_3 -> - happyIn105- (HsEitherRP happy_var_1 happy_var_3- )}}--happyReduce_265 = happySpecReduce_3 101# happyReduction_265-happyReduction_265 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn105- (HsEitherRP happy_var_1 happy_var_3- )}}--happyReduce_266 = happyMonadReduce 10# 102# happyReduction_266-happyReduction_266 (happy_x_10 `HappyStk`- happy_x_9 `HappyStk`- happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- 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) tk- = happyThen (case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut109 happy_x_3 of { happy_var_3 -> - case happyOut111 happy_x_4 of { happy_var_4 -> - case happyOut113 happy_x_5 of { happy_var_5 -> - case happyOut107 happy_x_7 of { happy_var_7 -> - case happyOut109 happy_x_9 of { happy_var_9 -> - ( do { n <- checkEqNames happy_var_3 happy_var_9;- let { cn = reverse happy_var_7;- as = reverse happy_var_4; };- return $ HsXTag happy_var_1 n as happy_var_5 cn })}}}}}}- ) (\r -> happyReturn (happyIn106 r))--happyReduce_267 = happyReduce 6# 102# happyReduction_267-happyReduction_267 (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 happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut109 happy_x_3 of { happy_var_3 -> - case happyOut111 happy_x_4 of { happy_var_4 -> - case happyOut113 happy_x_5 of { happy_var_5 -> - happyIn106- (HsXETag happy_var_1 happy_var_3 (reverse happy_var_4) happy_var_5- ) `HappyStk` happyRest}}}}--happyReduce_268 = happySpecReduce_3 102# happyReduction_268-happyReduction_268 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_2 of { happy_var_2 -> - happyIn106- (HsXExpTag happy_var_2- )}--happyReduce_269 = happySpecReduce_2 103# happyReduction_269-happyReduction_269 happy_x_2- happy_x_1- = case happyOut107 happy_x_1 of { happy_var_1 -> - case happyOut108 happy_x_2 of { happy_var_2 -> - happyIn107- (happy_var_2 : happy_var_1- )}}--happyReduce_270 = happySpecReduce_0 103# happyReduction_270-happyReduction_270 = happyIn107- ([]- )--happyReduce_271 = happySpecReduce_1 104# happyReduction_271-happyReduction_271 happy_x_1- = case happyOutTok happy_x_1 of { (XPcdata happy_var_1) -> - happyIn108- (HsXPcdata happy_var_1- )}--happyReduce_272 = happyReduce 4# 104# happyReduction_272-happyReduction_272 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut103 happy_x_3 of { happy_var_3 -> - happyIn108- (HsRPats happy_var_1 $ reverse happy_var_3- ) `HappyStk` happyRest}}--happyReduce_273 = happySpecReduce_1 104# happyReduction_273-happyReduction_273 happy_x_1- = case happyOut106 happy_x_1 of { happy_var_1 -> - happyIn108- (happy_var_1- )}--happyReduce_274 = happySpecReduce_3 105# happyReduction_274-happyReduction_274 happy_x_3- happy_x_2- happy_x_1- = case happyOut110 happy_x_1 of { happy_var_1 -> - case happyOut110 happy_x_3 of { happy_var_3 -> - happyIn109- (HsXDomName happy_var_1 happy_var_3- )}}--happyReduce_275 = happySpecReduce_1 105# happyReduction_275-happyReduction_275 happy_x_1- = case happyOut110 happy_x_1 of { happy_var_1 -> - happyIn109- (HsXName happy_var_1- )}--happyReduce_276 = happySpecReduce_1 106# happyReduction_276-happyReduction_276 happy_x_1- = case happyOutTok happy_x_1 of { (VarId happy_var_1) -> - happyIn110- (happy_var_1- )}--happyReduce_277 = happySpecReduce_1 106# happyReduction_277-happyReduction_277 happy_x_1- = case happyOutTok happy_x_1 of { (ConId happy_var_1) -> - happyIn110- (happy_var_1- )}--happyReduce_278 = happySpecReduce_1 106# happyReduction_278-happyReduction_278 happy_x_1- = case happyOutTok happy_x_1 of { (DVarId happy_var_1) -> - happyIn110- (mkDVar happy_var_1- )}--happyReduce_279 = happySpecReduce_1 106# happyReduction_279-happyReduction_279 happy_x_1- = happyIn110- ("type"- )--happyReduce_280 = happySpecReduce_1 106# happyReduction_280-happyReduction_280 happy_x_1- = happyIn110- ("class"- )--happyReduce_281 = happySpecReduce_2 107# happyReduction_281-happyReduction_281 happy_x_2- happy_x_1- = case happyOut111 happy_x_1 of { happy_var_1 -> - case happyOut112 happy_x_2 of { happy_var_2 -> - happyIn111- (happy_var_2 : happy_var_1- )}}--happyReduce_282 = happySpecReduce_0 107# happyReduction_282-happyReduction_282 = happyIn111- ([]- )--happyReduce_283 = happySpecReduce_3 108# happyReduction_283-happyReduction_283 happy_x_3- happy_x_2- happy_x_1- = case happyOut109 happy_x_1 of { happy_var_1 -> - case happyOut96 happy_x_3 of { happy_var_3 -> - happyIn112- (HsXAttr happy_var_1 happy_var_3- )}}--happyReduce_284 = happySpecReduce_1 109# happyReduction_284-happyReduction_284 happy_x_1- = case happyOut96 happy_x_1 of { happy_var_1 -> - happyIn113- (Just happy_var_1- )}--happyReduce_285 = happySpecReduce_0 109# happyReduction_285-happyReduction_285 = happyIn113- (Nothing- )--happyReduce_286 = happySpecReduce_1 110# happyReduction_286-happyReduction_286 happy_x_1- = case happyOutTok happy_x_1 of { (DVarId happy_var_1) -> - happyIn114- (mkDVarExpr happy_var_1- )}--happyReduce_287 = happySpecReduce_1 111# happyReduction_287-happyReduction_287 happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - happyIn115- (HsList [happy_var_1]- )}--happyReduce_288 = happySpecReduce_1 111# happyReduction_288-happyReduction_288 happy_x_1- = case happyOut116 happy_x_1 of { happy_var_1 -> - happyIn115- (HsList (reverse happy_var_1)- )}--happyReduce_289 = happySpecReduce_2 111# happyReduction_289-happyReduction_289 happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - happyIn115- (HsEnumFrom happy_var_1- )}--happyReduce_290 = happyReduce 4# 111# happyReduction_290-happyReduction_290 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn115- (HsEnumFromThen happy_var_1 happy_var_3- ) `HappyStk` happyRest}}--happyReduce_291 = happySpecReduce_3 111# happyReduction_291-happyReduction_291 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn115- (HsEnumFromTo happy_var_1 happy_var_3- )}}--happyReduce_292 = happyReduce 5# 111# happyReduction_292-happyReduction_292 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - case happyOut87 happy_x_5 of { happy_var_5 -> - happyIn115- (HsEnumFromThenTo happy_var_1 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_293 = happySpecReduce_3 111# happyReduction_293-happyReduction_293 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut117 happy_x_3 of { happy_var_3 -> - happyIn115- (HsListComp happy_var_1 (reverse happy_var_3)- )}}--happyReduce_294 = happySpecReduce_3 112# happyReduction_294-happyReduction_294 happy_x_3- happy_x_2- happy_x_1- = case happyOut116 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn116- (happy_var_3 : happy_var_1- )}}--happyReduce_295 = happySpecReduce_3 112# happyReduction_295-happyReduction_295 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn116- ([happy_var_3,happy_var_1]- )}}--happyReduce_296 = happySpecReduce_3 113# happyReduction_296-happyReduction_296 happy_x_3- happy_x_2- happy_x_1- = case happyOut117 happy_x_1 of { happy_var_1 -> - case happyOut118 happy_x_3 of { happy_var_3 -> - happyIn117- (happy_var_3 : happy_var_1- )}}--happyReduce_297 = happySpecReduce_1 113# happyReduction_297-happyReduction_297 happy_x_1- = case happyOut118 happy_x_1 of { happy_var_1 -> - happyIn117- ([happy_var_1]- )}--happyReduce_298 = happyReduce 4# 114# happyReduction_298-happyReduction_298 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut126 happy_x_1 of { happy_var_1 -> - case happyOut165 happy_x_2 of { happy_var_2 -> - case happyOut87 happy_x_4 of { happy_var_4 -> - happyIn118- (HsGenerator happy_var_2 happy_var_1 happy_var_4- ) `HappyStk` happyRest}}}--happyReduce_299 = happySpecReduce_1 114# happyReduction_299-happyReduction_299 happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - happyIn118- (HsQualifier happy_var_1- )}--happyReduce_300 = happySpecReduce_2 114# happyReduction_300-happyReduction_300 happy_x_2- happy_x_1- = case happyOut40 happy_x_2 of { happy_var_2 -> - happyIn118- (HsLetStmt happy_var_2- )}--happyReduce_301 = happySpecReduce_3 115# happyReduction_301-happyReduction_301 happy_x_3- happy_x_2- happy_x_1- = case happyOut120 happy_x_2 of { happy_var_2 -> - happyIn119- (happy_var_2- )}--happyReduce_302 = happySpecReduce_3 115# happyReduction_302-happyReduction_302 happy_x_3- happy_x_2- happy_x_1- = case happyOut120 happy_x_2 of { happy_var_2 -> - happyIn119- (happy_var_2- )}--happyReduce_303 = happySpecReduce_3 116# happyReduction_303-happyReduction_303 happy_x_3- happy_x_2- happy_x_1- = case happyOut121 happy_x_2 of { happy_var_2 -> - happyIn120- (reverse happy_var_2- )}--happyReduce_304 = happySpecReduce_3 117# happyReduction_304-happyReduction_304 happy_x_3- happy_x_2- happy_x_1- = case happyOut121 happy_x_1 of { happy_var_1 -> - case happyOut122 happy_x_3 of { happy_var_3 -> - happyIn121- (happy_var_3 : happy_var_1- )}}--happyReduce_305 = happySpecReduce_1 117# happyReduction_305-happyReduction_305 happy_x_1- = case happyOut122 happy_x_1 of { happy_var_1 -> - happyIn121- ([happy_var_1]- )}--happyReduce_306 = happyReduce 4# 118# happyReduction_306-happyReduction_306 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut126 happy_x_2 of { happy_var_2 -> - case happyOut123 happy_x_3 of { happy_var_3 -> - case happyOut83 happy_x_4 of { happy_var_4 -> - happyIn122- (HsAlt happy_var_1 happy_var_2 happy_var_3 happy_var_4- ) `HappyStk` happyRest}}}}--happyReduce_307 = happySpecReduce_2 119# happyReduction_307-happyReduction_307 happy_x_2- happy_x_1- = case happyOut87 happy_x_2 of { happy_var_2 -> - happyIn123- (HsUnGuardedAlt happy_var_2- )}--happyReduce_308 = happySpecReduce_1 119# happyReduction_308-happyReduction_308 happy_x_1- = case happyOut124 happy_x_1 of { happy_var_1 -> - happyIn123- (HsGuardedAlts (reverse happy_var_1)- )}--happyReduce_309 = happySpecReduce_2 120# happyReduction_309-happyReduction_309 happy_x_2- happy_x_1- = case happyOut124 happy_x_1 of { happy_var_1 -> - case happyOut125 happy_x_2 of { happy_var_2 -> - happyIn124- (happy_var_2 : happy_var_1- )}}--happyReduce_310 = happySpecReduce_1 120# happyReduction_310-happyReduction_310 happy_x_1- = case happyOut125 happy_x_1 of { happy_var_1 -> - happyIn124- ([happy_var_1]- )}--happyReduce_311 = happyReduce 5# 121# 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 happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut117 happy_x_3 of { happy_var_3 -> - case happyOut87 happy_x_5 of { happy_var_5 -> - happyIn125- (HsGuardedAlt happy_var_1 (reverse happy_var_3) happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_312 = happyMonadReduce 1# 122# happyReduction_312-happyReduction_312 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (case happyOut90 happy_x_1 of { happy_var_1 -> - ( checkPattern happy_var_1)}- ) (\r -> happyReturn (happyIn126 r))--happyReduce_313 = happySpecReduce_3 123# happyReduction_313-happyReduction_313 happy_x_3- happy_x_2- happy_x_1- = case happyOut128 happy_x_2 of { happy_var_2 -> - happyIn127- (happy_var_2- )}--happyReduce_314 = happySpecReduce_3 123# happyReduction_314-happyReduction_314 happy_x_3- happy_x_2- happy_x_1- = case happyOut128 happy_x_2 of { happy_var_2 -> - happyIn127- (happy_var_2- )}--happyReduce_315 = happyReduce 4# 124# happyReduction_315-happyReduction_315 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut40 happy_x_2 of { happy_var_2 -> - case happyOut128 happy_x_4 of { happy_var_4 -> - happyIn128- (HsLetStmt happy_var_2 : happy_var_4- ) `HappyStk` happyRest}}--happyReduce_316 = happyReduce 6# 124# happyReduction_316-happyReduction_316 (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 happyOut126 happy_x_1 of { happy_var_1 -> - case happyOut165 happy_x_2 of { happy_var_2 -> - case happyOut87 happy_x_4 of { happy_var_4 -> - case happyOut128 happy_x_6 of { happy_var_6 -> - happyIn128- (HsGenerator happy_var_2 happy_var_1 happy_var_4 : happy_var_6- ) `HappyStk` happyRest}}}}--happyReduce_317 = happySpecReduce_3 124# happyReduction_317-happyReduction_317 happy_x_3- happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - case happyOut128 happy_x_3 of { happy_var_3 -> - happyIn128- (HsQualifier happy_var_1 : happy_var_3- )}}--happyReduce_318 = happySpecReduce_2 124# happyReduction_318-happyReduction_318 happy_x_2- happy_x_1- = case happyOut128 happy_x_2 of { happy_var_2 -> - happyIn128- (happy_var_2- )}--happyReduce_319 = happySpecReduce_2 124# happyReduction_319-happyReduction_319 happy_x_2- happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - happyIn128- ([HsQualifier happy_var_1]- )}--happyReduce_320 = happySpecReduce_1 124# happyReduction_320-happyReduction_320 happy_x_1- = case happyOut87 happy_x_1 of { happy_var_1 -> - happyIn128- ([HsQualifier happy_var_1]- )}--happyReduce_321 = happySpecReduce_3 125# happyReduction_321-happyReduction_321 happy_x_3- happy_x_2- happy_x_1- = case happyOut129 happy_x_1 of { happy_var_1 -> - case happyOut130 happy_x_3 of { happy_var_3 -> - happyIn129- (happy_var_3 : happy_var_1- )}}--happyReduce_322 = happySpecReduce_1 125# happyReduction_322-happyReduction_322 happy_x_1- = case happyOut130 happy_x_1 of { happy_var_1 -> - happyIn129- ([happy_var_1]- )}--happyReduce_323 = happySpecReduce_3 126# happyReduction_323-happyReduction_323 happy_x_3- happy_x_2- happy_x_1- = case happyOut138 happy_x_1 of { happy_var_1 -> - case happyOut87 happy_x_3 of { happy_var_3 -> - happyIn130- (HsFieldUpdate happy_var_1 happy_var_3- )}}--happyReduce_324 = happySpecReduce_3 127# happyReduction_324-happyReduction_324 happy_x_3- happy_x_2- happy_x_1- = case happyOut132 happy_x_2 of { happy_var_2 -> - happyIn131- (happy_var_2- )}--happyReduce_325 = happySpecReduce_3 127# happyReduction_325-happyReduction_325 happy_x_3- happy_x_2- happy_x_1- = case happyOut132 happy_x_2 of { happy_var_2 -> - happyIn131- (happy_var_2- )}--happyReduce_326 = happySpecReduce_3 128# happyReduction_326-happyReduction_326 happy_x_3- happy_x_2- happy_x_1- = case happyOut133 happy_x_2 of { happy_var_2 -> - happyIn132- (reverse happy_var_2- )}--happyReduce_327 = happySpecReduce_3 129# happyReduction_327-happyReduction_327 happy_x_3- happy_x_2- happy_x_1- = case happyOut133 happy_x_1 of { happy_var_1 -> - case happyOut134 happy_x_3 of { happy_var_3 -> - happyIn133- (happy_var_3 : happy_var_1- )}}--happyReduce_328 = happySpecReduce_1 129# happyReduction_328-happyReduction_328 happy_x_1- = case happyOut134 happy_x_1 of { happy_var_1 -> - happyIn133- ([happy_var_1]- )}--happyReduce_329 = happyReduce 4# 130# happyReduction_329-happyReduction_329 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut165 happy_x_1 of { happy_var_1 -> - case happyOut139 happy_x_2 of { happy_var_2 -> - case happyOut87 happy_x_4 of { happy_var_4 -> - happyIn134- (HsIPBind happy_var_1 happy_var_2 happy_var_4- ) `HappyStk` happyRest}}}--happyReduce_330 = happySpecReduce_2 131# happyReduction_330-happyReduction_330 happy_x_2- happy_x_1- = happyIn135- (unit_con- )--happyReduce_331 = happySpecReduce_2 131# happyReduction_331-happyReduction_331 happy_x_2- happy_x_1- = happyIn135- (HsList []- )--happyReduce_332 = happySpecReduce_3 131# happyReduction_332-happyReduction_332 happy_x_3- happy_x_2- happy_x_1- = case happyOut101 happy_x_2 of { happy_var_2 -> - happyIn135- (tuple_con happy_var_2- )}--happyReduce_333 = happySpecReduce_1 131# happyReduction_333-happyReduction_333 happy_x_1- = case happyOut141 happy_x_1 of { happy_var_1 -> - happyIn135- (HsCon happy_var_1- )}--happyReduce_334 = happySpecReduce_1 132# happyReduction_334-happyReduction_334 happy_x_1- = case happyOut153 happy_x_1 of { happy_var_1 -> - happyIn136- (happy_var_1- )}--happyReduce_335 = happySpecReduce_3 132# happyReduction_335-happyReduction_335 happy_x_3- happy_x_2- happy_x_1- = case happyOut161 happy_x_2 of { happy_var_2 -> - happyIn136- (happy_var_2- )}--happyReduce_336 = happySpecReduce_1 133# happyReduction_336-happyReduction_336 happy_x_1- = case happyOut152 happy_x_1 of { happy_var_1 -> - happyIn137- (happy_var_1- )}--happyReduce_337 = happySpecReduce_3 133# happyReduction_337-happyReduction_337 happy_x_3- happy_x_2- happy_x_1- = case happyOut161 happy_x_2 of { happy_var_2 -> - happyIn137- (happy_var_2- )}--happyReduce_338 = happySpecReduce_1 134# happyReduction_338-happyReduction_338 happy_x_1- = case happyOut151 happy_x_1 of { happy_var_1 -> - happyIn138- (happy_var_1- )}--happyReduce_339 = happySpecReduce_3 134# happyReduction_339-happyReduction_339 happy_x_3- happy_x_2- happy_x_1- = case happyOut159 happy_x_2 of { happy_var_2 -> - happyIn138- (happy_var_2- )}--happyReduce_340 = happySpecReduce_1 135# happyReduction_340-happyReduction_340 happy_x_1- = case happyOut154 happy_x_1 of { happy_var_1 -> - happyIn139- (happy_var_1- )}--happyReduce_341 = happySpecReduce_1 136# happyReduction_341-happyReduction_341 happy_x_1- = case happyOut156 happy_x_1 of { happy_var_1 -> - happyIn140- (happy_var_1- )}--happyReduce_342 = happySpecReduce_3 136# happyReduction_342-happyReduction_342 happy_x_3- happy_x_2- happy_x_1- = case happyOut158 happy_x_2 of { happy_var_2 -> - happyIn140- (happy_var_2- )}--happyReduce_343 = happySpecReduce_1 137# happyReduction_343-happyReduction_343 happy_x_1- = case happyOut155 happy_x_1 of { happy_var_1 -> - happyIn141- (happy_var_1- )}--happyReduce_344 = happySpecReduce_3 137# happyReduction_344-happyReduction_344 happy_x_3- happy_x_2- happy_x_1- = case happyOut150 happy_x_2 of { happy_var_2 -> - happyIn141- (happy_var_2- )}--happyReduce_345 = happySpecReduce_1 138# happyReduction_345-happyReduction_345 happy_x_1- = case happyOut161 happy_x_1 of { happy_var_1 -> - happyIn142- (happy_var_1- )}--happyReduce_346 = happySpecReduce_3 138# happyReduction_346-happyReduction_346 happy_x_3- happy_x_2- happy_x_1- = case happyOut153 happy_x_2 of { happy_var_2 -> - happyIn142- (happy_var_2- )}--happyReduce_347 = happySpecReduce_1 139# happyReduction_347-happyReduction_347 happy_x_1- = case happyOut159 happy_x_1 of { happy_var_1 -> - happyIn143- (happy_var_1- )}--happyReduce_348 = happySpecReduce_3 139# happyReduction_348-happyReduction_348 happy_x_3- happy_x_2- happy_x_1- = case happyOut151 happy_x_2 of { happy_var_2 -> - happyIn143- (happy_var_2- )}--happyReduce_349 = happySpecReduce_1 140# happyReduction_349-happyReduction_349 happy_x_1- = case happyOut160 happy_x_1 of { happy_var_1 -> - happyIn144- (happy_var_1- )}--happyReduce_350 = happySpecReduce_3 140# happyReduction_350-happyReduction_350 happy_x_3- happy_x_2- happy_x_1- = case happyOut151 happy_x_2 of { happy_var_2 -> - happyIn144- (happy_var_2- )}--happyReduce_351 = happySpecReduce_1 141# happyReduction_351-happyReduction_351 happy_x_1- = case happyOut158 happy_x_1 of { happy_var_1 -> - happyIn145- (happy_var_1- )}--happyReduce_352 = happySpecReduce_3 141# happyReduction_352-happyReduction_352 happy_x_3- happy_x_2- happy_x_1- = case happyOut156 happy_x_2 of { happy_var_2 -> - happyIn145- (happy_var_2- )}--happyReduce_353 = happySpecReduce_1 142# happyReduction_353-happyReduction_353 happy_x_1- = case happyOut150 happy_x_1 of { happy_var_1 -> - happyIn146- (happy_var_1- )}--happyReduce_354 = happySpecReduce_3 142# happyReduction_354-happyReduction_354 happy_x_3- happy_x_2- happy_x_1- = case happyOut155 happy_x_2 of { happy_var_2 -> - happyIn146- (happy_var_2- )}--happyReduce_355 = happySpecReduce_1 143# happyReduction_355-happyReduction_355 happy_x_1- = case happyOut142 happy_x_1 of { happy_var_1 -> - happyIn147- (HsVarOp happy_var_1- )}--happyReduce_356 = happySpecReduce_1 143# happyReduction_356-happyReduction_356 happy_x_1- = case happyOut145 happy_x_1 of { happy_var_1 -> - happyIn147- (HsConOp happy_var_1- )}--happyReduce_357 = happySpecReduce_1 144# happyReduction_357-happyReduction_357 happy_x_1- = case happyOut143 happy_x_1 of { happy_var_1 -> - happyIn148- (HsQVarOp happy_var_1- )}--happyReduce_358 = happySpecReduce_1 144# happyReduction_358-happyReduction_358 happy_x_1- = case happyOut146 happy_x_1 of { happy_var_1 -> - happyIn148- (HsQConOp happy_var_1- )}--happyReduce_359 = happySpecReduce_1 145# happyReduction_359-happyReduction_359 happy_x_1- = case happyOut144 happy_x_1 of { happy_var_1 -> - happyIn149- (HsQVarOp happy_var_1- )}--happyReduce_360 = happySpecReduce_1 145# happyReduction_360-happyReduction_360 happy_x_1- = case happyOut146 happy_x_1 of { happy_var_1 -> - happyIn149- (HsQConOp happy_var_1- )}--happyReduce_361 = happySpecReduce_1 146# happyReduction_361-happyReduction_361 happy_x_1- = happyIn150- (list_cons_name- )--happyReduce_362 = happySpecReduce_1 146# happyReduction_362-happyReduction_362 happy_x_1- = case happyOut157 happy_x_1 of { happy_var_1 -> - happyIn150- (happy_var_1- )}--happyReduce_363 = happySpecReduce_1 147# happyReduction_363-happyReduction_363 happy_x_1- = case happyOut153 happy_x_1 of { happy_var_1 -> - happyIn151- (UnQual happy_var_1- )}--happyReduce_364 = happySpecReduce_1 147# happyReduction_364-happyReduction_364 happy_x_1- = case happyOutTok happy_x_1 of { (QVarId happy_var_1) -> - happyIn151- (Qual (Module (fst happy_var_1)) (HsIdent (snd happy_var_1))- )}--happyReduce_365 = happySpecReduce_1 148# happyReduction_365-happyReduction_365 happy_x_1- = case happyOutTok happy_x_1 of { (VarId happy_var_1) -> - happyIn152- (HsIdent happy_var_1- )}--happyReduce_366 = happySpecReduce_1 148# happyReduction_366-happyReduction_366 happy_x_1- = happyIn152- (as_name- )--happyReduce_367 = happySpecReduce_1 148# happyReduction_367-happyReduction_367 happy_x_1- = happyIn152- (qualified_name- )--happyReduce_368 = happySpecReduce_1 148# happyReduction_368-happyReduction_368 happy_x_1- = happyIn152- (hiding_name- )--happyReduce_369 = happySpecReduce_1 148# happyReduction_369-happyReduction_369 happy_x_1- = happyIn152- (export_name- )--happyReduce_370 = happySpecReduce_1 148# happyReduction_370-happyReduction_370 happy_x_1- = happyIn152- (stdcall_name- )--happyReduce_371 = happySpecReduce_1 148# happyReduction_371-happyReduction_371 happy_x_1- = happyIn152- (ccall_name- )--happyReduce_372 = happySpecReduce_1 149# happyReduction_372-happyReduction_372 happy_x_1- = case happyOut152 happy_x_1 of { happy_var_1 -> - happyIn153- (happy_var_1- )}--happyReduce_373 = happySpecReduce_1 149# happyReduction_373-happyReduction_373 happy_x_1- = happyIn153- (safe_name- )--happyReduce_374 = happySpecReduce_1 149# happyReduction_374-happyReduction_374 happy_x_1- = happyIn153- (unsafe_name- )--happyReduce_375 = happySpecReduce_1 149# happyReduction_375-happyReduction_375 happy_x_1- = happyIn153- (threadsafe_name- )--happyReduce_376 = happySpecReduce_1 150# happyReduction_376-happyReduction_376 happy_x_1- = case happyOutTok happy_x_1 of { (IDupVarId happy_var_1) -> - happyIn154- (HsIPDup happy_var_1- )}--happyReduce_377 = happySpecReduce_1 150# happyReduction_377-happyReduction_377 happy_x_1- = case happyOutTok happy_x_1 of { (ILinVarId happy_var_1) -> - happyIn154- (HsIPLin happy_var_1- )}--happyReduce_378 = happySpecReduce_1 151# happyReduction_378-happyReduction_378 happy_x_1- = case happyOut156 happy_x_1 of { happy_var_1 -> - happyIn155- (UnQual happy_var_1- )}--happyReduce_379 = happySpecReduce_1 151# happyReduction_379-happyReduction_379 happy_x_1- = case happyOutTok happy_x_1 of { (QConId happy_var_1) -> - happyIn155- (Qual (Module (fst happy_var_1)) (HsIdent (snd happy_var_1))- )}--happyReduce_380 = happySpecReduce_1 152# happyReduction_380-happyReduction_380 happy_x_1- = case happyOutTok happy_x_1 of { (ConId happy_var_1) -> - happyIn156- (HsIdent happy_var_1- )}--happyReduce_381 = happySpecReduce_1 153# happyReduction_381-happyReduction_381 happy_x_1- = case happyOut158 happy_x_1 of { happy_var_1 -> - happyIn157- (UnQual happy_var_1- )}--happyReduce_382 = happySpecReduce_1 153# happyReduction_382-happyReduction_382 happy_x_1- = case happyOutTok happy_x_1 of { (QConSym happy_var_1) -> - happyIn157- (Qual (Module (fst happy_var_1)) (HsSymbol (snd happy_var_1))- )}--happyReduce_383 = happySpecReduce_1 154# happyReduction_383-happyReduction_383 happy_x_1- = case happyOutTok happy_x_1 of { (ConSym happy_var_1) -> - happyIn158- (HsSymbol happy_var_1- )}--happyReduce_384 = happySpecReduce_1 155# happyReduction_384-happyReduction_384 happy_x_1- = case happyOut161 happy_x_1 of { happy_var_1 -> - happyIn159- (UnQual happy_var_1- )}--happyReduce_385 = happySpecReduce_1 155# happyReduction_385-happyReduction_385 happy_x_1- = case happyOut163 happy_x_1 of { happy_var_1 -> - happyIn159- (happy_var_1- )}--happyReduce_386 = happySpecReduce_1 156# happyReduction_386-happyReduction_386 happy_x_1- = case happyOut162 happy_x_1 of { happy_var_1 -> - happyIn160- (UnQual happy_var_1- )}--happyReduce_387 = happySpecReduce_1 156# happyReduction_387-happyReduction_387 happy_x_1- = case happyOut163 happy_x_1 of { happy_var_1 -> - happyIn160- (happy_var_1- )}--happyReduce_388 = happySpecReduce_1 157# happyReduction_388-happyReduction_388 happy_x_1- = case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> - happyIn161- (HsSymbol happy_var_1- )}--happyReduce_389 = happySpecReduce_1 157# happyReduction_389-happyReduction_389 happy_x_1- = happyIn161- (minus_name- )--happyReduce_390 = happySpecReduce_1 157# happyReduction_390-happyReduction_390 happy_x_1- = happyIn161- (pling_name- )--happyReduce_391 = happySpecReduce_1 157# happyReduction_391-happyReduction_391 happy_x_1- = happyIn161- (dot_name- )--happyReduce_392 = happySpecReduce_1 158# happyReduction_392-happyReduction_392 happy_x_1- = case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> - happyIn162- (HsSymbol happy_var_1- )}--happyReduce_393 = happySpecReduce_1 158# happyReduction_393-happyReduction_393 happy_x_1- = happyIn162- (pling_name- )--happyReduce_394 = happySpecReduce_1 158# happyReduction_394-happyReduction_394 happy_x_1- = happyIn162- (dot_name- )--happyReduce_395 = happySpecReduce_1 159# happyReduction_395-happyReduction_395 happy_x_1- = case happyOutTok happy_x_1 of { (QVarSym happy_var_1) -> - happyIn163- (Qual (Module (fst happy_var_1)) (HsSymbol (snd happy_var_1))- )}--happyReduce_396 = happySpecReduce_1 160# happyReduction_396-happyReduction_396 happy_x_1- = case happyOutTok happy_x_1 of { (IntTok happy_var_1) -> - happyIn164- (HsInt happy_var_1- )}--happyReduce_397 = happySpecReduce_1 160# happyReduction_397-happyReduction_397 happy_x_1- = case happyOutTok happy_x_1 of { (Character happy_var_1) -> - happyIn164- (HsChar happy_var_1- )}--happyReduce_398 = happySpecReduce_1 160# happyReduction_398-happyReduction_398 happy_x_1- = case happyOutTok happy_x_1 of { (FloatTok happy_var_1) -> - happyIn164- (HsFrac happy_var_1- )}--happyReduce_399 = happySpecReduce_1 160# happyReduction_399-happyReduction_399 happy_x_1- = case happyOutTok happy_x_1 of { (StringTok happy_var_1) -> - happyIn164- (HsString happy_var_1- )}--happyReduce_400 = happyMonadReduce 0# 161# happyReduction_400-happyReduction_400 (happyRest) tk- = happyThen (( getSrcLoc)- ) (\r -> happyReturn (happyIn165 r))--happyReduce_401 = happyMonadReduce 0# 162# happyReduction_401-happyReduction_401 (happyRest) tk- = happyThen (( pushCurrentContext)- ) (\r -> happyReturn (happyIn166 r))--happyReduce_402 = happySpecReduce_1 163# happyReduction_402-happyReduction_402 happy_x_1- = happyIn167- (()- )--happyReduce_403 = happyMonadReduce 1# 163# happyReduction_403-happyReduction_403 (happy_x_1 `HappyStk`- happyRest) tk- = happyThen (( popContext)- ) (\r -> happyReturn (happyIn167 r))--happyReduce_404 = happySpecReduce_1 164# happyReduction_404-happyReduction_404 happy_x_1- = case happyOutTok happy_x_1 of { (ConId happy_var_1) -> - happyIn168- (Module happy_var_1- )}--happyReduce_405 = happySpecReduce_1 164# happyReduction_405-happyReduction_405 happy_x_1- = case happyOutTok happy_x_1 of { (QConId happy_var_1) -> - happyIn168- (Module (fst happy_var_1 ++ '.':snd happy_var_1)- )}--happyReduce_406 = happySpecReduce_1 165# happyReduction_406-happyReduction_406 happy_x_1- = case happyOut156 happy_x_1 of { happy_var_1 -> - happyIn169- (happy_var_1- )}--happyReduce_407 = happySpecReduce_1 166# happyReduction_407-happyReduction_407 happy_x_1- = case happyOut156 happy_x_1 of { happy_var_1 -> - happyIn170- (happy_var_1- )}--happyReduce_408 = happySpecReduce_1 167# happyReduction_408-happyReduction_408 happy_x_1- = case happyOut155 happy_x_1 of { happy_var_1 -> - happyIn171- (happy_var_1- )}--happyReduce_409 = happySpecReduce_1 168# happyReduction_409-happyReduction_409 happy_x_1- = case happyOut155 happy_x_1 of { happy_var_1 -> - happyIn172- (happy_var_1- )}--happyReduce_410 = happySpecReduce_1 169# happyReduction_410-happyReduction_410 happy_x_1- = case happyOut153 happy_x_1 of { happy_var_1 -> - happyIn173- (happy_var_1- )}--happyReduce_411 = happySpecReduce_3 170# happyReduction_411-happyReduction_411 happy_x_3- happy_x_2- happy_x_1- = case happyOut173 happy_x_2 of { happy_var_2 -> - happyIn174- (UnQual happy_var_2- )}--happyReduce_412 = happySpecReduce_1 170# happyReduction_412-happyReduction_412 happy_x_1- = case happyOut175 happy_x_1 of { happy_var_1 -> - happyIn174- (UnQual happy_var_1- )}--happyReduce_413 = happySpecReduce_1 171# happyReduction_413-happyReduction_413 happy_x_1- = case happyOutTok happy_x_1 of { (VarSym happy_var_1) -> - happyIn175- (HsSymbol happy_var_1- )}--happyNewToken action sts stk- = lexer(\tk -> - let cont i = happyDoAction i tk action sts stk in- case tk of {- EOF -> happyDoAction 107# tk action sts stk;- VarId happy_dollar_dollar -> cont 1#;- QVarId happy_dollar_dollar -> cont 2#;- IDupVarId happy_dollar_dollar -> cont 3#;- ILinVarId happy_dollar_dollar -> cont 4#;- ConId happy_dollar_dollar -> cont 5#;- QConId happy_dollar_dollar -> cont 6#;- DVarId happy_dollar_dollar -> cont 7#;- VarSym happy_dollar_dollar -> cont 8#;- ConSym happy_dollar_dollar -> cont 9#;- QVarSym happy_dollar_dollar -> cont 10#;- QConSym happy_dollar_dollar -> cont 11#;- IntTok happy_dollar_dollar -> cont 12#;- FloatTok happy_dollar_dollar -> cont 13#;- Character happy_dollar_dollar -> cont 14#;- StringTok happy_dollar_dollar -> cont 15#;- LeftParen -> cont 16#;- RightParen -> cont 17#;- LeftHashParen -> cont 18#;- RightHashParen -> cont 19#;- SemiColon -> cont 20#;- LeftCurly -> cont 21#;- RightCurly -> cont 22#;- VRightCurly -> cont 23#;- LeftSquare -> cont 24#;- RightSquare -> cont 25#;- Comma -> cont 26#;- Underscore -> cont 27#;- BackQuote -> cont 28#;- Dot -> cont 29#;- DotDot -> cont 30#;- Colon -> cont 31#;- DoubleColon -> cont 32#;- Equals -> cont 33#;- Backslash -> cont 34#;- Bar -> cont 35#;- LeftArrow -> cont 36#;- RightArrow -> cont 37#;- At -> cont 38#;- Tilde -> cont 39#;- DoubleArrow -> cont 40#;- Minus -> cont 41#;- Exclamation -> cont 42#;- RPOpen -> cont 43#;- RPClose -> cont 44#;- RPSeqOpen -> cont 45#;- RPSeqClose -> cont 46#;- RPStar -> cont 47#;- RPStarG -> cont 48#;- RPPlus -> cont 49#;- RPPlusG -> cont 50#;- RPOpt -> cont 51#;- RPOptG -> cont 52#;- RPEither -> cont 53#;- RPCAt -> cont 54#;- THIdEscape happy_dollar_dollar -> cont 55#;- THParenEscape -> cont 56#;- THExpQuote -> cont 57#;- THPatQuote -> cont 58#;- THTypQuote -> cont 59#;- THDecQuote -> cont 60#;- THCloseQuote -> cont 61#;- THReifyDecl -> cont 62#;- THReifyType -> cont 63#;- THReifyFixity -> cont 64#;- XPcdata happy_dollar_dollar -> cont 65#;- XStdTagOpen -> cont 66#;- XCloseTagOpen -> cont 67#;- XCodeTagOpen -> cont 68#;- XStdTagClose -> cont 69#;- XEmptyTagClose -> cont 70#;- XCodeTagClose -> cont 71#;- KW_Foreign -> cont 72#;- KW_Export -> cont 73#;- KW_Safe -> cont 74#;- KW_Unsafe -> cont 75#;- KW_Threadsafe -> cont 76#;- KW_StdCall -> cont 77#;- KW_CCall -> cont 78#;- KW_As -> cont 79#;- KW_Case -> cont 80#;- KW_Class -> cont 81#;- KW_Data -> cont 82#;- KW_Default -> cont 83#;- KW_Deriving -> cont 84#;- KW_DLet -> cont 85#;- KW_Do -> cont 86#;- KW_Else -> cont 87#;- KW_Forall -> cont 88#;- KW_Hiding -> cont 89#;- KW_If -> cont 90#;- KW_Import -> cont 91#;- KW_In -> cont 92#;- KW_Infix -> cont 93#;- KW_InfixL -> cont 94#;- KW_InfixR -> cont 95#;- KW_Instance -> cont 96#;- KW_Let -> cont 97#;- KW_MDo -> cont 98#;- KW_Module -> cont 99#;- KW_NewType -> cont 100#;- KW_Of -> cont 101#;- KW_Then -> cont 102#;- KW_Type -> cont 103#;- KW_Where -> cont 104#;- KW_With -> cont 105#;- KW_Qualified -> cont 106#;- _ -> happyError' tk- })--happyError_ tk = happyError' tk--happyThen :: () => P a -> (a -> P b) -> P b-happyThen = (>>=)-happyReturn :: () => a -> P a-happyReturn = (return)-happyThen1 = happyThen-happyReturn1 :: () => a -> P a-happyReturn1 = happyReturn-happyError' :: () => Token -> P a-happyError' tk = (\token -> happyError) tk--parse = happySomeParser where- happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut4 x))--happySeq = happyDontSeq---happyError :: P a-happyError = fail "Parse error"---- | Parse of a string, which should contain a complete Haskell 98 module.-parseModule :: String -> ParseResult HsModule-parseModule = runParser parse---- | Parse of a string, which should contain a complete Haskell 98 module.-parseModuleWithMode :: ParseMode -> String -> ParseResult HsModule-parseModuleWithMode mode = runParserWithMode mode parse-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 28 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Int# Happy_IntList------{-# LINE 49 "templates/GenericTemplate.hs" #-}--{-# LINE 59 "templates/GenericTemplate.hs" #-}--{-# LINE 68 "templates/GenericTemplate.hs" #-}--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 i tk st- -1# -> {- nothing -}- happyAccept i tk st- n | (n <# (0# :: Int#)) -> {- nothing -}-- (happyReduceArr ! rule) i tk st- where rule = (I# ((negateInt# ((n +# (1# :: Int#))))))- n -> {- nothing -}--- happyShift new_state i tk st- where new_state = (n -# (1# :: Int#))- where off = indexShortOffAddr happyActOffsets st- off_i = (off +# i)- check = if (off_i >=# (0# :: Int#))- then (indexShortOffAddr happyCheck off_i ==# i)- else False- action | check = indexShortOffAddr happyTable off_i- | otherwise = indexShortOffAddr happyDefActions st--{-# LINE 127 "templates/GenericTemplate.hs" #-}---indexShortOffAddr (HappyA# arr) off =-#if __GLASGOW_HASKELL__ > 500- narrow16Int# i-#elif __GLASGOW_HASKELL__ == 500- intToInt16# i-#else- (i `iShiftL#` 16#) `iShiftRA#` 16#-#endif- where-#if __GLASGOW_HASKELL__ >= 503- i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)-#else- i = word2Int# ((high `shiftL#` 8#) `or#` low)-#endif- high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- low = int2Word# (ord# (indexCharOffAddr# arr off'))- off' = off *# 2#------data HappyAddr = HappyA# Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 170 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =- let i = (case unsafeCoerce# x of { (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 -# (1# :: 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 =- happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))- where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))- drop_stk = happyDropStk k 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 =- happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))- where sts1@((HappyCons (st1@(action)) (_))) = happyDrop k (HappyCons (st) (sts))- drop_stk = happyDropStk k stk-- off = indexShortOffAddr happyGotoOffsets st1- off_i = (off +# nt)- new_state = indexShortOffAddr happyTable off_i-----happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n -# (1# :: Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n -# (1#::Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = - {- nothing -}- happyDoAction j tk new_state- where off = indexShortOffAddr happyGotoOffsets st- off_i = (off +# 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 0# tk old_st _ stk =--- trace "failing" $ - happyError_ 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 i tk (action) sts stk =--- trace "entering error recovery" $- happyDoAction 0# tk action sts ( (unsafeCoerce# (I# (i))) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---happyTcHack :: 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.
− Language/Haskell/Hsx/Parser.ly
@@ -1,1167 +0,0 @@-> {-> ------------------------------------------------------------------------------> -- |-> -- Module : Language.Haskell.Hsx.Parser-> -- Original : Language.Haskell.Parser-> -- Copyright : (c) Niklas Broberg 2004,-> -- Original (c) Simon Marlow, Sven Panne 1997-2000-> -- License : BSD-style (see the file LICENSE.txt)-> ---> -- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se-> -- Stability : experimental-> -- Portability : portable-> ---> ---> ------------------------------------------------------------------------------>-> module Language.Haskell.Hsx.Parser (-> parseModule, parseModuleWithMode,-> ParseMode(..), defaultParseMode, ParseResult(..)) where-> -> import Language.Haskell.Hsx.Syntax-> import Language.Haskell.Hsx.ParseMonad-> import Language.Haskell.Hsx.Lexer-> import Language.Haskell.Hsx.ParseUtils-> }--------------------------------------------------------------------------------This module comprises a parser for Haskell 98 with the following extensions--* Multi-parameter type classes with functional dependencies-* Implicit parameters-* Pattern guards-* Mdo notation-* FFI-* HaRP-* HSP--Most of the code is blatantly stolen from the GHC module Language.Haskell.Parser.-Some of the code for extensions is greatly influenced by GHC's internal parser-library, ghc/compiler/parser/Parser.y. -------------------------------------------------------------------------------Conflicts: 3 shift/reduce--2 for ambiguity in 'case x of y | let z = y in z :: Bool -> b'- (don't know whether to reduce 'Bool' as a btype or shift the '->'.- Similarly lambda and if. The default resolution in favour of the- shift means that a guard can never end with a type signature.- In mitigation: it's a rare case and no Haskell implementation- allows these, because it would require unbounded lookahead.)- There are 2 conflicts rather than one because contexts are parsed- as btypes (cf ctype).- -1 for ambiguity in 'let ?x ...'- the parser can't tell whether the ?x is the lhs of a normal binding or- an implicit binding. Fortunately resolving as shift gives it the only- sensible meaning, namely the lhs of an implicit binding.---------------------------------------------------------------------------------> %token-> VARID { VarId $$ }-> QVARID { QVarId $$ }-> IDUPID { IDupVarId $$ } -- duplicable implicit parameter ?x-> ILINID { ILinVarId $$ } -- linear implicit parameter %x-> CONID { ConId $$ }-> QCONID { QConId $$ }-> DVARID { DVarId $$ } -- VARID containing dashes-> VARSYM { VarSym $$ }-> CONSYM { ConSym $$ }-> QVARSYM { QVarSym $$ }-> QCONSYM { QConSym $$ }-> INT { IntTok $$ }-> RATIONAL { FloatTok $$ }-> CHAR { Character $$ }-> STRING { StringTok $$ }--Symbols--> '(' { LeftParen }-> ')' { RightParen }-> '(#' { LeftHashParen }-> '#)' { RightHashParen }-> ';' { SemiColon }-> '{' { LeftCurly }-> '}' { RightCurly }-> vccurly { VRightCurly } -- a virtual close brace-> '[' { LeftSquare }-> ']' { RightSquare }-> ',' { Comma }-> '_' { Underscore }-> '`' { BackQuote }--Reserved operators--> '.' { Dot }-> '..' { DotDot }-> ':' { Colon }-> '::' { DoubleColon }-> '=' { Equals }-> '\\' { Backslash }-> '|' { Bar }-> '<-' { LeftArrow }-> '->' { RightArrow }-> '@' { At }-> '~' { Tilde }-> '=>' { DoubleArrow }-> '-' { Minus }-> '!' { Exclamation }--Harp--> '[/' { RPOpen }-> '/]' { RPClose }-> '(/' { RPSeqOpen }-> '/)' { RPSeqClose }-> '*' { RPStar }-> '*!' { RPStarG }-> '+' { RPPlus }-> '+!' { RPPlusG }-> '?' { RPOpt }-> '?!' { RPOptG }-> 'rp|' { RPEither } -- '|' already taken-> '@:' { RPCAt }--Template Haskell--> IDSPLICE { THIdEscape $$ }-> '$(' { THParenEscape }-> '[|' { THExpQuote }-> '[p|' { THPatQuote }-> '[t|' { THTypQuote }-> '[d|' { THDecQuote }-> '|]' { THCloseQuote }-> 'reifyDecl' { THReifyDecl }-> 'reifyType' { THReifyType }-> 'reifyFixity' { THReifyFixity }--Hsx--> PCDATA { XPcdata $$ }-> '<' { XStdTagOpen }-> '</' { XCloseTagOpen }-> '<%' { XCodeTagOpen }-> '>' { XStdTagClose }-> '/>' { XEmptyTagClose }-> '%>' { XCodeTagClose }--FFI--> 'foreign' { KW_Foreign }-> 'export' { KW_Export }-> 'safe' { KW_Safe }-> 'unsafe' { KW_Unsafe }-> 'threadsafe' { KW_Threadsafe }-> 'stdcall' { KW_StdCall }-> 'ccall' { KW_CCall }--Reserved Ids--> 'as' { KW_As }-> 'case' { KW_Case }-> 'class' { KW_Class }-> 'data' { KW_Data }-> 'default' { KW_Default }-> 'deriving' { KW_Deriving }-> 'dlet' { KW_DLet } -- implicit parameter binding clause-> 'do' { KW_Do }-> 'else' { KW_Else }-> 'forall' { KW_Forall } -- universal/existential qualification-> 'hiding' { KW_Hiding }-> 'if' { KW_If }-> 'import' { KW_Import }-> 'in' { KW_In }-> 'infix' { KW_Infix }-> 'infixl' { KW_InfixL }-> 'infixr' { KW_InfixR }-> 'instance' { KW_Instance }-> 'let' { KW_Let }-> 'mdo' { KW_MDo }-> 'module' { KW_Module }-> 'newtype' { KW_NewType }-> 'of' { KW_Of }-> 'then' { KW_Then }-> 'type' { KW_Type }-> 'where' { KW_Where }-> 'with' { KW_With } -- implicit parameter binding clause-> 'qualified' { KW_Qualified }--> %monad { P }-> %lexer { lexer } { EOF }-> %name parse-> %tokentype { Token }-> %%--------------------------------------------------------------------------------HSP Pages--> page :: { HsModule }-> : topxml {% mkPageModule $1 }-> | '<%' module '%>' srcloc topxml {% mkPage $2 $4 $5 }-> | module { $1 }--> topxml :: { HsExp }-> : srcloc '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $3 $9;-> let { cn = reverse $7;-> as = reverse $4; };-> return $ HsXTag $1 n as $5 cn } }-> | srcloc '<' name attrs mattr '/>' { HsXETag $1 $3 (reverse $4) $5 }---------------------------------------------------------------------------------Module Header--> module :: { HsModule }-> : srcloc 'module' modid maybeexports 'where' body-> { HsModule $1 $3 $4 (fst $6) (snd $6) }-> | srcloc body-> { HsModule $1 main_mod (Just [HsEVar (UnQual main_name)])-> (fst $2) (snd $2) }--> body :: { ([HsImportDecl],[HsDecl]) }-> : '{' bodyaux '}' { $2 }-> | open bodyaux close { $2 }--> bodyaux :: { ([HsImportDecl],[HsDecl]) }-> : optsemis impdecls semis topdecls { (reverse $2, $4) }-> | optsemis topdecls { ([], $2) }-> | optsemis impdecls optsemis { (reverse $2, []) }-> | optsemis { ([], []) }--> semis :: { () }-> : optsemis ';' { () }--> optsemis :: { () }-> : semis { () }-> | {- empty -} { () }--------------------------------------------------------------------------------The Export List--> maybeexports :: { Maybe [HsExportSpec] }-> : exports { Just $1 }-> | {- empty -} { Nothing }--> exports :: { [HsExportSpec] }-> : '(' exportlist optcomma ')' { reverse $2 }-> | '(' optcomma ')' { [] }--> optcomma :: { () }-> : ',' { () }-> | {- empty -} { () }--> exportlist :: { [HsExportSpec] }-> : exportlist ',' export { $3 : $1 }-> | export { [$1] }--> export :: { HsExportSpec }-> : qvar { HsEVar $1 }-> | qtyconorcls { HsEAbs $1 }-> | qtyconorcls '(' '..' ')' { HsEThingAll $1 }-> | qtyconorcls '(' ')' { HsEThingWith $1 [] }-> | qtyconorcls '(' cnames ')' { HsEThingWith $1 (reverse $3) }-> | 'module' modid { HsEModuleContents $2 }--------------------------------------------------------------------------------Import Declarations--> impdecls :: { [HsImportDecl] }-> : impdecls semis impdecl { $3 : $1 }-> | impdecl { [$1] }--> impdecl :: { HsImportDecl }-> : srcloc 'import' optqualified modid maybeas maybeimpspec-> { HsImportDecl $1 $4 $3 $5 $6 }--> optqualified :: { Bool }-> : 'qualified' { True }-> | {- empty -} { False }--> maybeas :: { Maybe Module }-> : 'as' modid { Just $2 }-> | {- empty -} { Nothing }---> maybeimpspec :: { Maybe (Bool, [HsImportSpec]) }-> : impspec { Just $1 }-> | {- empty -} { Nothing }--> impspec :: { (Bool, [HsImportSpec]) }-> : opthiding '(' importlist optcomma ')' { ($1, reverse $3) }-> | opthiding '(' optcomma ')' { ($1, []) }--> opthiding :: { Bool }-> : 'hiding' { True }-> | {- empty -} { False }--> importlist :: { [HsImportSpec] }-> : importlist ',' importspec { $3 : $1 }-> | importspec { [$1] }--> importspec :: { HsImportSpec }-> : var { HsIVar $1 }-> | tyconorcls { HsIAbs $1 }-> | tyconorcls '(' '..' ')' { HsIThingAll $1 }-> | tyconorcls '(' ')' { HsIThingWith $1 [] }-> | tyconorcls '(' cnames ')' { HsIThingWith $1 (reverse $3) }--> cnames :: { [HsCName] }-> : cnames ',' cname { $3 : $1 }-> | cname { [$1] }--> cname :: { HsCName }-> : var { HsVarName $1 }-> | con { HsConName $1 }--------------------------------------------------------------------------------Fixity Declarations--> fixdecl :: { HsDecl }-> : srcloc infix prec ops { HsInfixDecl $1 $2 $3 (reverse $4) }--> prec :: { Int }-> : {- empty -} { 9 }-> | INT {% checkPrec $1 }--> infix :: { HsAssoc }-> : 'infix' { HsAssocNone }-> | 'infixl' { HsAssocLeft }-> | 'infixr' { HsAssocRight }--> ops :: { [HsOp] }-> : ops ',' op { $3 : $1 }-> | op { [$1] }--------------------------------------------------------------------------------Top-Level Declarations--Note: The report allows topdecls to be empty. This would result in another-shift/reduce-conflict, so we don't handle this case here, but in bodyaux.--> topdecls :: { [HsDecl] }-> : topdecls1 optsemis {% checkRevDecls $1 }--> topdecls1 :: { [HsDecl] }-> : topdecls1 semis topdecl { $3 : $1 }-> | topdecl { [$1] }--> topdecl :: { HsDecl }-> : srcloc 'type' simpletype '=' ctype-> { HsTypeDecl $1 (fst $3) (snd $3) $5 }-> | srcloc 'data' ctype constrs0 deriving-> {% do { (cs,c,t) <- checkDataHeader $3;-> return (HsDataDecl $1 cs c t (reverse $4) $5) } }-> | srcloc 'data' ctype 'where' gadtlist-> {% do { (cs,c,t) <- checkDataHeader $3;-> return (HsGDataDecl $1 cs c t (reverse $5)) } }-> | srcloc 'newtype' ctype '=' constr deriving-> {% do { (cs,c,t) <- checkDataHeader $3;-> return (HsNewTypeDecl $1 cs c t $5 $6) } }--A class declaration may include functional dependencies.-> | srcloc 'class' ctype fds optcbody-> {% do { (cs,c,vs) <- checkClassHeader $3;-> return (HsClassDecl $1 cs c vs $4 $5) } }-> | srcloc 'instance' ctype optvaldefs-> {% do { (cs,c,ts) <- checkInstHeader $3;-> return (HsInstDecl $1 cs c ts $4) } }-> | srcloc 'default' '(' typelist ')'-> { HsDefaultDecl $1 $4 }-> | srcloc '$(' exp ')'-> {% do { e <- checkExpr $3;-> return $ HsSpliceDecl $1 $ HsParenSplice e } }->-> | srcloc 'foreign' 'import' callconv safety fspec-> { let (s,n,t) = $6 in HsForImp $1 $4 $5 s n t }-> | srcloc 'foreign' 'export' callconv fspec-> { let (s,n,t) = $5 in HsForExp $1 $4 s n t }-> | decl { $1 }--> typelist :: { [HsType] }-> : types { reverse $1 }-> | type { [$1] }-> | {- empty -} { [] }--> decls :: { [HsDecl] }-> : optsemis decls1 optsemis {% checkRevDecls $2 }-> | optsemis { [] }--> decls1 :: { [HsDecl] }-> : decls1 semis decl { $3 : $1 }-> | decl { [$1] }--> decl :: { HsDecl }-> : signdecl { $1 }-> | fixdecl { $1 }-> | valdef { $1 }--> decllist :: { [HsDecl] }-> : '{' decls '}' { $2 }-> | open decls close { $2 }--> signdecl :: { HsDecl }-> : srcloc vars '::' ctype { HsTypeSig $1 (reverse $2) $4 }--Binding can be either of implicit parameters, or it can be a normal sequence-of declarations. The two kinds cannot be mixed within the same block of-binding.--> binds :: { HsBinds }-> : decllist { HsBDecls $1 }-> | '{' ipbinds '}' { HsIPBinds $2 }-> | open ipbinds close { HsIPBinds $2 }--ATTENTION: Dirty Hackery Ahead! If the second alternative of vars is var-instead of qvar, we get another shift/reduce-conflict. Consider the-following programs:-- { (+) :: ... } only var- { (+) x y = ... } could (incorrectly) be qvar--We re-use expressions for patterns, so a qvar would be allowed in patterns-instead of a var only (which would be correct). But deciding what the + is,-would require more lookahead. So let's check for ourselves...--> vars :: { [HsName] }-> : vars ',' var { $3 : $1 }-> | qvar {% do { n <- checkUnQual $1;-> return [n] } }--------------------------------------------------------------------------------FFI--> callconv :: { HsCallConv }-> : 'stdcall' { StdCall }-> | 'ccall' { CCall }--> safety :: { HsSafety }-> : 'safe' { PlaySafe False }-> | 'unsafe' { PlayRisky }-> | 'threadsafe' { PlaySafe True }-> | {- empty -} { PlaySafe False }--> fspec :: { (String, HsName, HsType) }-> : STRING var_no_safety '::' dtype { ($1, $2, $4) }-> | var_no_safety '::' dtype { ("", $1, $3) }--------------------------------------------------------------------------------Types--> dtype :: { HsType }-> : btype { $1 }-> | btype qtyconop dtype { HsTyInfix $1 $2 $3 }-> | btype qtyvarop dtype { HsTyInfix $1 $2 $3 }-> | btype '->' dtype { HsTyFun $1 $3 }--Implicit parameters can occur in normal types, as well as in contexts.--> type :: { HsType }-> : ivar '::' dtype { HsTyPred $ HsIParam $1 $3 }-> | dtype { $1 }--> btype :: { HsType }-> : btype atype { HsTyApp $1 $2 }-> | atype { $1 }--> atype :: { HsType }-> : gtycon { HsTyCon $1 }-> | tyvar { HsTyVar $1 }-> | '(' types ')' { HsTyTuple Boxed (reverse $2) }-> | '(#' types1 '#)' { HsTyTuple Unboxed (reverse $2) }-> | '[' type ']' { HsTyApp list_tycon $2 }-> | '(' ctype ')' { $2 }--> gtycon :: { HsQName }-> : qconid { $1 }-> | '(' ')' { unit_tycon_name }-> | '(' '->' ')' { fun_tycon_name }-> | '[' ']' { list_tycon_name }-> | '(' commas ')' { tuple_tycon_name $2 }--These are for infix types--> qtyconop :: { HsQName }-> : qconop { $1 }------(Slightly edited) Comment from GHC's hsparser.y:-"context => type" vs "type" is a problem, because you can't distinguish between-- foo :: (Baz a, Baz a)- bar :: (Baz a, Baz a) => [a] -> [a] -> [a]--with one token of lookahead. The HACK is to parse the context as a btype-(more specifically as a tuple type), then check that it has the right form-C a, or (C1 a, C2 b, ... Cn z) and convert it into a context. Blaach!--> ctype :: { HsType }-> : 'forall' tyvars '.' ctype { mkHsTyForall (Just $2) [] $4 }-> | context '=>' type { mkHsTyForall Nothing $1 $3 }-> | type { $1 }--> context :: { HsContext }-> : btype {% checkContext $1 }--> types :: { [HsType] }-> : types1 ',' type { $3 : $1 }--> types1 :: { [HsType] }-> : type { [$1] }-> | types1 ',' type { $3 : $1 }--> simpletype :: { (HsName, [HsName]) }-> : tycon tyvars { ($1,reverse $2) }--> tyvars :: { [HsName] }-> : tyvars tyvar { $2 : $1 }-> | {- empty -} { [] }--------------------------------------------------------------------------------Functional Dependencies--> fds :: { [HsFunDep] }-> : {- empty -} { [] }-> | '|' fds1 { reverse $2 }--> fds1 :: { [HsFunDep] }-> : fds1 ',' fd { $3 : $1 }-> | fd { [$1] }--> fd :: { HsFunDep }-> : tyvars '->' tyvars { HsFunDep (reverse $1) (reverse $3) }--------------------------------------------------------------------------------Datatype declarations--GADTs--> gadtlist :: { [HsGadtDecl] }-> : '{' gadtconstrs1 '}' { $2 }-> | open gadtconstrs1 close { $2 }--> gadtconstrs1 :: { [HsGadtDecl] }-> : optsemis gadtconstrs optsemis { $2 }--> gadtconstrs :: { [HsGadtDecl] }-> : gadtconstrs semis gadtconstr { $3 : $1 }-> | gadtconstr { [$1] }--> gadtconstr :: { HsGadtDecl }-> : srcloc qcon '::' ctype {% do { c <- checkUnQual $2;-> return $ HsGadtDecl $1 c $4 } }--> constrs0 :: { [HsQualConDecl] }-> : {- empty -} { [] }-> | '=' constrs { $2 }--> constrs :: { [HsQualConDecl] }-> : constrs '|' constr { $3 : $1 }-> | constr { [$1] }--> constr :: { HsQualConDecl }-> : srcloc forall context '=>' constr1 { HsQualConDecl $1 $2 $3 $5 }-> | srcloc forall constr1 { HsQualConDecl $1 $2 [] $3 }--> forall :: { [HsName] }-> : 'forall' tyvars '.' { $2 }-> | {- empty -} { [] }--> constr1 :: { HsConDecl }-> : scontype { HsConDecl (fst $1) (snd $1) }-> | sbtype conop sbtype { HsConDecl $2 [$1,$3] }-> | con '{' '}' { HsRecDecl $1 [] }-> | con '{' fielddecls '}' { HsRecDecl $1 (reverse $3) }--> scontype :: { (HsName, [HsBangType]) }-> : btype {% do { (c,ts) <- splitTyConApp $1;-> return (c,map HsUnBangedTy ts) } }-> | scontype1 { $1 }--> scontype1 :: { (HsName, [HsBangType]) }-> : btype '!' atype {% do { (c,ts) <- splitTyConApp $1;-> return (c,map HsUnBangedTy ts++-> [HsBangedTy $3]) } }-> | scontype1 satype { (fst $1, snd $1 ++ [$2] ) }--> satype :: { HsBangType }-> : atype { HsUnBangedTy $1 }-> | '!' atype { HsBangedTy $2 }--> sbtype :: { HsBangType }-> : btype { HsUnBangedTy $1 }-> | '!' atype { HsBangedTy $2 }--> fielddecls :: { [([HsName],HsBangType)] }-> : fielddecls ',' fielddecl { $3 : $1 }-> | fielddecl { [$1] }--> fielddecl :: { ([HsName],HsBangType) }-> : vars '::' stype { (reverse $1, $3) }--> stype :: { HsBangType }-> : ctype { HsUnBangedTy $1 } -> | '!' atype { HsBangedTy $2 }--> deriving :: { [HsQName] }-> : {- empty -} { [] }-> | 'deriving' qtycls { [$2] }-> | 'deriving' '(' ')' { [] }-> | 'deriving' '(' dclasses ')' { reverse $3 }--> dclasses :: { [HsQName] }-> : dclasses ',' qtycls { $3 : $1 }-> | qtycls { [$1] }--------------------------------------------------------------------------------Class declarations--No implicit parameters in the where clause of a class declaration.-> optcbody :: { [HsDecl] }-> : 'where' decllist {% checkClassBody $2 }-> | {- empty -} { [] }--------------------------------------------------------------------------------Instance declarations--> optvaldefs :: { [HsDecl] }-> : 'where' '{' valdefs '}' {% checkClassBody $3 }-> | 'where' open valdefs close {% checkClassBody $3 }-> | {- empty -} { [] }--> valdefs :: { [HsDecl] }-> : optsemis valdefs1 optsemis {% checkRevDecls $2 }-> | optsemis { [] }--> valdefs1 :: { [HsDecl] }-> : valdefs1 semis valdef { $3 : $1 }-> | valdef { [$1] }--------------------------------------------------------------------------------Value definitions--> valdef :: { HsDecl }-> : srcloc exp0b rhs optwhere {% checkValDef $1 $2 $3 $4 }--May bind implicit parameters-> optwhere :: { HsBinds }-> : 'where' binds { $2 }-> | {- empty -} { HsBDecls [] }--> rhs :: { HsRhs }-> : '=' exp {% do { e <- checkExpr $2;-> return (HsUnGuardedRhs e) } }-> | gdrhs { HsGuardedRhss (reverse $1) }--> gdrhs :: { [HsGuardedRhs] }-> : gdrhs gdrh { $2 : $1 }-> | gdrh { [$1] }--Guards may contain patterns, hence quals instead of exp.-> gdrh :: { HsGuardedRhs }-> : srcloc '|' quals '=' exp {% do { e <- checkExpr $5;-> return (HsGuardedRhs $1 (reverse $3) e) } }--------------------------------------------------------------------------------Expressions--Note: The Report specifies a meta-rule for lambda, let and if expressions-(the exp's that end with a subordinate exp): they extend as far to-the right as possible. That means they cannot be followed by a type-signature or infix application. To implement this without shift/reduce-conflicts, we split exp10 into these expressions (exp10a) and the others-(exp10b). That also means that only an exp0 ending in an exp10b (an exp0b)-can followed by a type signature or infix application. So we duplicate-the exp0 productions to distinguish these from the others (exp0a).--> exp :: { HsExp }-> : exp0b '::' srcloc ctype { HsExpTypeSig $3 $1 $4 }-> | exp0b 'with' ipbinding { HsWith $1 $3 } -- implicit parameters-> | exp0 { $1 }--> exp0 :: { HsExp }-> : exp0a { $1 }-> | exp0b { $1 }--> exp0a :: { HsExp }-> : exp0b qop exp10a { HsInfixApp $1 $2 $3 }-> | exp10a { $1 }--> exp0b :: { HsExp }-> : exp0b qop exp10b { HsInfixApp $1 $2 $3 }-> | dvarexp { $1 }-> | exp10b { $1 }--> exp10a :: { HsExp }-> : '\\' srcloc apats '->' exp { HsLambda $2 (reverse $3) $5 }-A let may bind implicit parameters-> | 'let' binds 'in' exp { HsLet $2 $4 }-> | 'dlet' ipbinding 'in' exp { HsDLet $2 $4 }-> | 'if' exp 'then' exp 'else' exp { HsIf $2 $4 $6 }--> exp10b :: { HsExp }-> : 'case' exp 'of' altslist { HsCase $2 $4 }-> | '-' fexp { HsNegApp $2 }-> | 'do' stmtlist { HsDo $2 }-> | 'mdo' stmtlist { HsMDo $2 }-> | reifyexp { HsReifyExp $1 }-> | fexp { $1 }--> fexp :: { HsExp }-> : fexp aexp { HsApp $1 $2 }-> | aexp { $1 }--> apats :: { [HsPat] }-> : apats apat { $2 : $1 }-> | apat { [$1] }--> apat :: { HsPat }-> : aexp {% checkPattern $1 }--UGLY: Because patterns and expressions are mixed, aexp has to be split into-two rules: One right-recursive and one left-recursive. Otherwise we get two-reduce/reduce-errors (for as-patterns and irrefutable patters).--Even though the variable in an as-pattern cannot be qualified, we use-qvar here to avoid a shift/reduce conflict, and then check it ourselves-(as for vars above).--> aexp :: { HsExp }-> : qvar '@' aexp {% do { n <- checkUnQual $1;-> return (HsAsPat n $3) } }-> | qvar '@:' aexp {% do { n <- checkUnQual $1;-> return (HsCAsRP n $3) } }-> | '~' aexp { HsIrrPat $2 }-> | aexp1 { $1 }--Note: The first two alternatives of aexp1 are not necessarily record-updates: they could be labeled constructions.--> aexp1 :: { HsExp }-> : aexp1 '{' '}' {% mkRecConstrOrUpdate $1 [] }-> | aexp1 '{' fbinds '}' {% mkRecConstrOrUpdate $1 (reverse $3) }-> | aexp1 '*' { HsStarRP $1 }-> | aexp1 '*!' { HsStarGRP $1 }-> | aexp1 '+' { HsPlusRP $1 }-> | aexp1 '+!' { HsPlusGRP $1 }-> | aexp1 '?' { HsOptRP $1 }-> | aexp1 '?!' { HsOptGRP $1 }-> | aexp2 { $1 }--According to the Report, the left section (e op) is legal iff (e op x)-parses equivalently to ((e) op x). Thus e must be an exp0b.-An implicit parameter can be used as an expression.--> aexp2 :: { HsExp }-> : ivar { HsIPVar $1 }-> | qvar { HsVar $1 }-> | gcon { $1 }-> | literal { HsLit $1 }-> | '(' exp ')' { HsParen $2 }-> | '(' texps ')' { HsTuple (reverse $2) }-> | '[' list ']' { $2 }-> | '(' exp0b qop ')' { HsLeftSection $2 $3 }-> | '(' qopm exp0 ')' { HsRightSection $2 $3 }-> | '_' { HsWildCard }-> | '(' erpats ')' { $2 }-> | '(/' rpats '/)' { HsSeqRP $ reverse $2 }-> | srcloc '[/' rpats '/]' { HsRPats $1 $ reverse $3 }-> | xml { $1 }--Template Haskell-> | IDSPLICE { HsSpliceExp $ HsIdSplice $1 }-> | '$(' exp ')' {% do { e <- checkExpr $2;-> return $ HsSpliceExp $ HsParenSplice e } }-> | '[|' exp '|]' {% do { e <- checkExpr $2;-> return $ HsBracketExp $ HsExpBracket e } }-> | '[p|' exp0 '|]' {% do { p <- checkPattern $2;-> return $ HsBracketExp $ HsPatBracket p } }-> | '[t|' ctype '|]' { HsBracketExp $ HsTypeBracket $2 }-> | '[d|' open topdecls close '|]' { HsBracketExp $ HsDeclBracket $3 }--> reifyexp :: { HsReify }-> : 'reifyDecl' gtycon { HsReifyDecl $2 }-> | 'reifyDecl' qvar { HsReifyDecl $2 }-> | 'reifyType' qcname { HsReifyType $2 }-> | 'reifyFixity' qcname { HsReifyFixity $2 }--> qcname :: { HsQName }-> : qvar { $1 }-> | gcon {% getGConName $1 }-End Template Haskell--> commas :: { Int }-> : commas ',' { $1 + 1 }-> | ',' { 1 }--> texps :: { [HsExp] }-> : texps ',' exp { $3 : $1 }-> | exp ',' exp { [$3,$1] }--------------------------------------------------------------------------------Harp Extensions--> rpats :: { [HsExp] }-> : rpats ',' rpat { $3 : $1 }-> | rpat { [$1] }--> rpat :: { HsExp }-> : erpats { $1 }-> | exp { $1 }--Either patterns are left associative-> erpats :: { HsExp }-> : exp 'rp|' erpats { HsEitherRP $1 $3 }-> | exp 'rp|' exp { HsEitherRP $1 $3 }--------------------------------------------------------------------------------Hsx Extensions--> xml :: { HsExp }-> : srcloc '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $3 $9;-> let { cn = reverse $7;-> as = reverse $4; };-> return $ HsXTag $1 n as $5 cn } }-> | srcloc '<' name attrs mattr '/>' { HsXETag $1 $3 (reverse $4) $5 }-> | '<%' exp '%>' { HsXExpTag $2 }--> children :: { [HsExp] }-> : children child { $2 : $1 }-> | {- empty -} { [] }--> child :: { HsExp }-> : PCDATA { HsXPcdata $1 }-> | srcloc '[/' rpats '/]' { HsRPats $1 $ reverse $3 }-> | xml { $1 }--> name :: { HsXName }-> : xmlname ':' xmlname { HsXDomName $1 $3 }-> | xmlname { HsXName $1 }--> xmlname :: { String }-> : VARID { $1 }-> | CONID { $1 }-> | DVARID { mkDVar $1 }-> | 'type' { "type" }-> | 'class' { "class" }--> attrs :: { [HsXAttr] }-> : attrs attr { $2 : $1 }-> | {- empty -} { [] }--> attr :: { HsXAttr }-> : name '=' aexp { HsXAttr $1 $3 }--> mattr :: { Maybe HsExp }-> : aexp { Just $1 }-> | {-empty-} { Nothing }--Turning dash variables into infix expressions with '-'-> dvarexp :: { HsExp }-> : DVARID { mkDVarExpr $1 }--------------------------------------------------------------------------------List expressions--The rules below are little bit contorted to keep lexps left-recursive while-avoiding another shift/reduce-conflict.--> list :: { HsExp }-> : exp { HsList [$1] }-> | lexps { HsList (reverse $1) }-> | exp '..' { HsEnumFrom $1 }-> | exp ',' exp '..' { HsEnumFromThen $1 $3 }-> | exp '..' exp { HsEnumFromTo $1 $3 }-> | exp ',' exp '..' exp { HsEnumFromThenTo $1 $3 $5 }-> | exp '|' quals { HsListComp $1 (reverse $3) }--> lexps :: { [HsExp] }-> : lexps ',' exp { $3 : $1 }-> | exp ',' exp { [$3,$1] }--------------------------------------------------------------------------------List comprehensions--> quals :: { [HsStmt] }-> : quals ',' qual { $3 : $1 }-> | qual { [$1] }--> qual :: { HsStmt }-> : pat srcloc '<-' exp { HsGenerator $2 $1 $4 }-> | exp { HsQualifier $1 }-> | 'let' binds { HsLetStmt $2 }--------------------------------------------------------------------------------Case alternatives--> altslist :: { [HsAlt] }-> : '{' alts '}' { $2 }-> | open alts close { $2 }--> alts :: { [HsAlt] }-> : optsemis alts1 optsemis { reverse $2 }--> alts1 :: { [HsAlt] }-> : alts1 semis alt { $3 : $1 }-> | alt { [$1] }--> alt :: { HsAlt }-> : srcloc pat ralt optwhere { HsAlt $1 $2 $3 $4 }--> ralt :: { HsGuardedAlts }-> : '->' exp { HsUnGuardedAlt $2 }-> | gdpats { HsGuardedAlts (reverse $1) }--> gdpats :: { [HsGuardedAlt] }-> : gdpats gdpat { $2 : $1 }-> | gdpat { [$1] }--A guard can be a pattern guard, hence quals instead of exp0.-> gdpat :: { HsGuardedAlt }-> : srcloc '|' quals '->' exp { HsGuardedAlt $1 (reverse $3) $5 }--> pat :: { HsPat }-> : exp0b {% checkPattern $1 }--------------------------------------------------------------------------------Statement sequences--As per the Report, but with stmt expanded to simplify building the list-without introducing conflicts. This also ensures that the last stmt is-an expression.--> stmtlist :: { [HsStmt] }-> : '{' stmts '}' { $2 }-> | open stmts close { $2 }--A let statement may bind implicit parameters.-> stmts :: { [HsStmt] }-> : 'let' binds ';' stmts { HsLetStmt $2 : $4 }-> | pat srcloc '<-' exp ';' stmts { HsGenerator $2 $1 $4 : $6 }-> | exp ';' stmts { HsQualifier $1 : $3 }-> | ';' stmts { $2 }-> | exp ';' { [HsQualifier $1] }-> | exp { [HsQualifier $1] }--------------------------------------------------------------------------------Record Field Update/Construction--> fbinds :: { [HsFieldUpdate] }-> : fbinds ',' fbind { $3 : $1 }-> | fbind { [$1] }--> fbind :: { HsFieldUpdate }-> : qvar '=' exp { HsFieldUpdate $1 $3 }--------------------------------------------------------------------------------Implicit parameter bindings--> ipbinding :: { [HsIPBind] }-> : '{' ipbinds '}' { $2 }-> | open ipbinds close { $2 }--> ipbinds :: { [HsIPBind] }-> : optsemis ipbinds1 optsemis { reverse $2 }--> ipbinds1 :: { [HsIPBind] }-> : ipbinds1 semis ipbind { $3 : $1 }-> | ipbind { [$1] }--> ipbind :: { HsIPBind }-> : srcloc ivar '=' exp { HsIPBind $1 $2 $4 }--------------------------------------------------------------------------------Variables, Constructors and Operators.--> gcon :: { HsExp }-> : '(' ')' { unit_con }-> | '[' ']' { HsList [] }-> | '(' commas ')' { tuple_con $2 }-> | qcon { HsCon $1 }--> var :: { HsName }-> : varid { $1 }-> | '(' varsym ')' { $2 }--> var_no_safety :: { HsName }-> : varid_no_safety { $1 }-> | '(' varsym ')' { $2 }--> qvar :: { HsQName }-> : qvarid { $1 }-> | '(' qvarsym ')' { $2 }--Implicit parameter-> ivar :: { HsIPName }-> : ivarid { $1 }--> con :: { HsName }-> : conid { $1 }-> | '(' consym ')' { $2 }--> qcon :: { HsQName }-> : qconid { $1 }-> | '(' gconsym ')' { $2 }--> varop :: { HsName }-> : varsym { $1 }-> | '`' varid '`' { $2 }--> qvarop :: { HsQName }-> : qvarsym { $1 }-> | '`' qvarid '`' { $2 }--> qvaropm :: { HsQName }-> : qvarsymm { $1 }-> | '`' qvarid '`' { $2 }--> conop :: { HsName }-> : consym { $1 } -> | '`' conid '`' { $2 }--> qconop :: { HsQName }-> : gconsym { $1 }-> | '`' qconid '`' { $2 }--> op :: { HsOp }-> : varop { HsVarOp $1 }-> | conop { HsConOp $1 }--> qop :: { HsQOp }-> : qvarop { HsQVarOp $1 }-> | qconop { HsQConOp $1 }--> qopm :: { HsQOp }-> : qvaropm { HsQVarOp $1 }-> | qconop { HsQConOp $1 }--> gconsym :: { HsQName }-> : ':' { list_cons_name }-> | qconsym { $1 }--------------------------------------------------------------------------------Identifiers and Symbols--> qvarid :: { HsQName }-> : varid { UnQual $1 }-> | QVARID { Qual (Module (fst $1)) (HsIdent (snd $1)) }--> varid_no_safety :: { HsName }-> : VARID { HsIdent $1 }-> | 'as' { as_name }-> | 'qualified' { qualified_name }-> | 'hiding' { hiding_name }-> | 'export' { export_name }-> | 'stdcall' { stdcall_name }-> | 'ccall' { ccall_name }--> varid :: { HsName }-> : varid_no_safety { $1 }-> | 'safe' { safe_name }-> | 'unsafe' { unsafe_name }-> | 'threadsafe' { threadsafe_name }---Implicit parameter-> ivarid :: { HsIPName }-> : IDUPID { HsIPDup $1 }-> | ILINID { HsIPLin $1 }--> qconid :: { HsQName }-> : conid { UnQual $1 }-> | QCONID { Qual (Module (fst $1)) (HsIdent (snd $1)) }--> conid :: { HsName }-> : CONID { HsIdent $1 }--> qconsym :: { HsQName }-> : consym { UnQual $1 }-> | QCONSYM { Qual (Module (fst $1)) (HsSymbol (snd $1)) }--> consym :: { HsName }-> : CONSYM { HsSymbol $1 }--> qvarsym :: { HsQName }-> : varsym { UnQual $1 }-> | qvarsym1 { $1 }--> qvarsymm :: { HsQName }-> : varsymm { UnQual $1 }-> | qvarsym1 { $1 }--> varsym :: { HsName }-> : VARSYM { HsSymbol $1 }-> | '-' { minus_name }-> | '!' { pling_name }-> | '.' { dot_name }--> varsymm :: { HsName } -- varsym not including '-'-> : VARSYM { HsSymbol $1 }-> | '!' { pling_name }-> | '.' { dot_name }--> qvarsym1 :: { HsQName }-> : QVARSYM { Qual (Module (fst $1)) (HsSymbol (snd $1)) }--> literal :: { HsLiteral }-> : INT { HsInt $1 }-> | CHAR { HsChar $1 }-> | RATIONAL { HsFrac $1 }-> | STRING { HsString $1 }--> srcloc :: { SrcLoc } : {% getSrcLoc }- -------------------------------------------------------------------------------Layout--> open :: { () } : {% pushCurrentContext }--> close :: { () }-> : vccurly { () } -- context popped in lexer.-> | error {% popContext }--------------------------------------------------------------------------------Miscellaneous (mostly renamings)--> modid :: { Module }-> : CONID { Module $1 }-> | QCONID { Module (fst $1 ++ '.':snd $1) }--> tyconorcls :: { HsName }-> : conid { $1 }--> tycon :: { HsName }-> : conid { $1 }--> qtyconorcls :: { HsQName }-> : qconid { $1 }--> qtycls :: { HsQName }-> : qconid { $1 }--> tyvar :: { HsName }-> : varid { $1 }--> qtyvarop :: { HsQName }-> qtyvarop : '`' tyvar '`' { UnQual $2 }-> | tyvarsym { UnQual $1 }--> tyvarsym :: { HsName }-> tyvarsym : VARSYM { HsSymbol $1 }---------------------------------------------------------------------------------> {-> happyError :: P a-> happyError = fail "Parse error"--> -- | Parse of a string, which should contain a complete Haskell 98 module.-> parseModule :: String -> ParseResult HsModule-> parseModule = runParser parse--> -- | Parse of a string, which should contain a complete Haskell 98 module.-> parseModuleWithMode :: ParseMode -> String -> ParseResult HsModule-> parseModuleWithMode mode = runParserWithMode mode parse-> }
− Language/Haskell/Hsx/Pretty.hs
@@ -1,985 +0,0 @@-{-# OPTIONS_GHC -w #-}--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Hsx.Pretty--- Original : Language.Haskell.Pretty--- Copyright : (c) Niklas Broberg 2004,--- (c) The GHC Team, Noel Winstanley 1997-2000--- License : BSD-style (see the file LICENSE.txt)------ Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se--- Stability : experimental--- Portability : portable------ Pretty printer for Haskell with extensions.-----------------------------------------------------------------------------------module Language.Haskell.Hsx.Pretty (- -- * Pretty printing- Pretty,- prettyPrintStyleMode, prettyPrintWithMode, prettyPrint,- -- * Pretty-printing styles (from "Text.PrettyPrint.HughesPJ")- P.Style(..), P.style, P.Mode(..),- -- * Haskell formatting modes- PPHsMode(..), Indent, PPLayout(..), defaultMode) where--import Language.Haskell.Hsx.Syntax--import qualified Text.PrettyPrint as P--infixl 5 $$$----------------------------------------------------------------------------------- | Varieties of layout we can use.-data PPLayout = PPOffsideRule -- ^ classical layout- | PPSemiColon -- ^ classical layout made explicit- | PPInLine -- ^ inline decls, with newlines between them- | PPNoLayout -- ^ everything on a single line- deriving Eq--type Indent = Int---- | Pretty-printing parameters.------ /Note:/ the 'onsideIndent' must be positive and less than all other indents.-data PPHsMode = PPHsMode {- -- | indentation of a class or instance- classIndent :: Indent,- -- | indentation of a @do@-expression- doIndent :: Indent,- -- | indentation of the body of a- -- @case@ expression- caseIndent :: Indent,- -- | indentation of the declarations in a- -- @let@ expression- letIndent :: Indent,- -- | indentation of the declarations in a- -- @where@ clause- whereIndent :: Indent,- -- | indentation added for continuation- -- lines that would otherwise be offside- onsideIndent :: Indent,- -- | blank lines between statements?- spacing :: Bool,- -- | Pretty-printing style to use- layout :: PPLayout,- -- | add GHC-style @LINE@ pragmas to output?- linePragmas :: Bool,- -- | not implemented yet- comments :: Bool- }---- | The default mode: pretty-print using the offside rule and sensible--- defaults.-defaultMode :: PPHsMode-defaultMode = PPHsMode{- classIndent = 8,- doIndent = 3,- caseIndent = 4,- letIndent = 4,- whereIndent = 6,- onsideIndent = 2,- spacing = True,- layout = PPOffsideRule,- linePragmas = False,- comments = True- }---- | Pretty printing monad-newtype DocM s a = DocM (s -> a)--instance Functor (DocM s) where- fmap f xs = do x <- xs; return (f x)--instance Monad (DocM s) where- (>>=) = thenDocM- (>>) = then_DocM- return = retDocM--{-# INLINE thenDocM #-}-{-# INLINE then_DocM #-}-{-# INLINE retDocM #-}-{-# INLINE unDocM #-}-{-# INLINE getPPEnv #-}--thenDocM :: DocM s a -> (a -> DocM s b) -> DocM s b-thenDocM m k = DocM $ (\s -> case unDocM m $ s of a -> unDocM (k a) $ s)--then_DocM :: DocM s a -> DocM s b -> DocM s b-then_DocM m k = DocM $ (\s -> case unDocM m $ s of _ -> unDocM k $ s)--retDocM :: a -> DocM s a-retDocM a = DocM (\_s -> a)--unDocM :: DocM s a -> (s -> a)-unDocM (DocM f) = f---- all this extra stuff, just for this one function.-getPPEnv :: DocM s s-getPPEnv = DocM id---- So that pp code still looks the same--- this means we lose some generality though---- | The document type produced by these pretty printers uses a 'PPHsMode'--- environment.-type Doc = DocM PPHsMode P.Doc---- | Things that can be pretty-printed, including all the syntactic objects--- in "Language.Haskell.Syntax".-class Pretty a where- -- | Pretty-print something in isolation.- pretty :: a -> Doc- -- | Pretty-print something in a precedence context.- prettyPrec :: Int -> a -> Doc- pretty = prettyPrec 0- prettyPrec _ = pretty---- The pretty printing combinators--empty :: Doc-empty = return P.empty--nest :: Int -> Doc -> Doc-nest i m = m >>= return . P.nest i----- Literals--text, ptext :: String -> Doc-text = return . P.text-ptext = return . P.text--char :: Char -> Doc-char = return . P.char--int :: Int -> Doc-int = return . P.int--integer :: Integer -> Doc-integer = return . P.integer--float :: Float -> Doc-float = return . P.float--double :: Double -> Doc-double = return . P.double--rational :: Rational -> Doc-rational = return . P.rational---- Simple Combining Forms--parens, brackets, braces,quotes,doubleQuotes :: Doc -> Doc-parens d = d >>= return . P.parens-brackets d = d >>= return . P.brackets-braces d = d >>= return . P.braces-quotes d = d >>= return . P.quotes-doubleQuotes d = d >>= return . P.doubleQuotes--parensIf :: Bool -> Doc -> Doc-parensIf True = parens-parensIf False = id---- Constants--semi,comma,colon,space,equals :: Doc-semi = return P.semi-comma = return P.comma-colon = return P.colon-space = return P.space-equals = return P.equals--lparen,rparen,lbrack,rbrack,lbrace,rbrace :: Doc-lparen = return P.lparen-rparen = return P.rparen-lbrack = return P.lbrack-rbrack = return P.rbrack-lbrace = return P.lbrace-rbrace = return P.rbrace---- Combinators--(<>),(<+>),($$),($+$) :: Doc -> Doc -> Doc-aM <> bM = do{a<-aM;b<-bM;return (a P.<> b)}-aM <+> bM = do{a<-aM;b<-bM;return (a P.<+> b)}-aM $$ bM = do{a<-aM;b<-bM;return (a P.$$ b)}-aM $+$ bM = do{a<-aM;b<-bM;return (a P.$+$ b)}--hcat,hsep,vcat,sep,cat,fsep,fcat :: [Doc] -> Doc-hcat dl = sequence dl >>= return . P.hcat-hsep dl = sequence dl >>= return . P.hsep-vcat dl = sequence dl >>= return . P.vcat-sep dl = sequence dl >>= return . P.sep-cat dl = sequence dl >>= return . P.cat-fsep dl = sequence dl >>= return . P.fsep-fcat dl = sequence dl >>= return . P.fcat---- Some More--hang :: Doc -> Int -> Doc -> Doc-hang dM i rM = do{d<-dM;r<-rM;return $ P.hang d i r}---- Yuk, had to cut-n-paste this one from Pretty.hs-punctuate :: Doc -> [Doc] -> [Doc]-punctuate _ [] = []-punctuate p (d1:ds) = go d1 ds- where- go d [] = [d]- go d (e:es) = (d <> p) : go e es---- | render the document with a given style and mode.-renderStyleMode :: P.Style -> PPHsMode -> Doc -> String-renderStyleMode ppStyle ppMode d = P.renderStyle ppStyle . unDocM d $ ppMode---- | render the document with a given mode.-renderWithMode :: PPHsMode -> Doc -> String-renderWithMode = renderStyleMode P.style---- | render the document with 'defaultMode'.-render :: Doc -> String-render = renderWithMode defaultMode---- | pretty-print with a given style and mode.-prettyPrintStyleMode :: Pretty a => P.Style -> PPHsMode -> a -> String-prettyPrintStyleMode ppStyle ppMode = renderStyleMode ppStyle ppMode . pretty---- | pretty-print with the default style and a given mode.-prettyPrintWithMode :: Pretty a => PPHsMode -> a -> String-prettyPrintWithMode = prettyPrintStyleMode P.style---- | pretty-print with the default style and 'defaultMode'.-prettyPrint :: Pretty a => a -> String-prettyPrint = prettyPrintWithMode defaultMode--fullRenderWithMode :: PPHsMode -> P.Mode -> Int -> Float ->- (P.TextDetails -> a -> a) -> a -> Doc -> a-fullRenderWithMode ppMode m i f fn e mD =- P.fullRender m i f fn e $ (unDocM mD) ppMode---fullRender :: P.Mode -> Int -> Float -> (P.TextDetails -> a -> a)- -> a -> Doc -> a-fullRender = fullRenderWithMode defaultMode--------------------------- Pretty-Print a Module ---------------------instance Pretty HsModule where- pretty (HsModule pos m mbExports imp decls) =- markLine pos $- topLevel (ppHsModuleHeader m mbExports)- (map pretty imp ++ map pretty decls)---------------------------- Module Header -------------------------------ppHsModuleHeader :: Module -> Maybe [HsExportSpec] -> Doc-ppHsModuleHeader m mbExportList = mySep [- text "module",- pretty m,- maybePP (parenList . map pretty) mbExportList,- text "where"]--instance Pretty Module where- pretty (Module modName) = text modName--instance Pretty HsExportSpec where- pretty (HsEVar name) = pretty name- pretty (HsEAbs name) = pretty name- pretty (HsEThingAll name) = pretty name <> text "(..)"- pretty (HsEThingWith name nameList) =- pretty name <> (parenList . map pretty $ nameList)- pretty (HsEModuleContents m) = text "module" <+> pretty m--instance Pretty HsImportDecl where- pretty (HsImportDecl pos m qual mbName mbSpecs) =- markLine pos $- mySep [text "import",- if qual then text "qualified" else empty,- pretty m,- maybePP (\m' -> text "as" <+> pretty m') mbName,- maybePP exports mbSpecs]- where- exports (b,specList) =- if b then text "hiding" <+> specs else specs- where specs = parenList . map pretty $ specList--instance Pretty HsImportSpec where- pretty (HsIVar name) = pretty name- pretty (HsIAbs name) = pretty name- pretty (HsIThingAll name) = pretty name <> text "(..)"- pretty (HsIThingWith name nameList) =- pretty name <> (parenList . map pretty $ nameList)--------------------------- Declarations -------------------------------instance Pretty HsDecl where- pretty (HsTypeDecl loc name nameList htype) =- blankline $- markLine loc $- mySep ( [text "type", pretty name]- ++ map pretty nameList- ++ [equals, pretty htype])-- pretty (HsDataDecl loc context name nameList constrList derives) =- blankline $- markLine loc $- mySep ( [text "data", ppHsContext context, pretty name]- ++ map pretty nameList)- <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))- (map pretty constrList))- $$$ ppHsDeriving derives)-- pretty (HsGDataDecl loc context name nameList gadtList) =- blankline $- markLine loc $- mySep ( [text "data", ppHsContext context, pretty name]- ++ map pretty nameList ++ [text "where"])- $$$ ppBody classIndent (map pretty gadtList)-- pretty (HsNewTypeDecl pos context name nameList constr derives) =- blankline $- markLine pos $- mySep ( [text "newtype", ppHsContext context, pretty name]- ++ map pretty nameList)- <+> equals <+> (pretty constr $$$ ppHsDeriving derives)-- --m{spacing=False}- -- special case for empty class declaration- pretty (HsClassDecl pos context name nameList fundeps []) =- blankline $- markLine pos $- mySep ( [text "class", ppHsContext context, pretty name]- ++ map pretty nameList ++ [ppFunDeps fundeps])- pretty (HsClassDecl pos context name nameList fundeps declList) =- blankline $- markLine pos $- mySep ( [text "class", ppHsContext context, pretty name]- ++ map pretty nameList ++ [ppFunDeps fundeps, text "where"])- $$$ ppBody classIndent (map pretty declList)-- -- m{spacing=False}- -- special case for empty instance declaration- pretty (HsInstDecl pos context name args []) =- blankline $- markLine pos $- mySep ( [text "instance", ppHsContext context, pretty name]- ++ map ppHsAType args)- pretty (HsInstDecl pos context name args declList) =- blankline $- markLine pos $- mySep ( [text "instance", ppHsContext context, pretty name]- ++ map ppHsAType args ++ [text "where"])- $$$ ppBody classIndent (map pretty declList)-- pretty (HsDefaultDecl pos htypes) =- blankline $- markLine pos $- text "default" <+> parenList (map pretty htypes)-- pretty (HsSpliceDecl pos splice) =- blankline $- markLine pos $- pretty splice-- pretty (HsTypeSig pos nameList qualType) =- blankline $- markLine pos $- mySep ((punctuate comma . map pretty $ nameList)- ++ [text "::", pretty qualType])-- pretty (HsFunBind matches) =- foldr ($$$) empty (map pretty matches)-- pretty (HsPatBind pos pat rhs whereBinds) =- markLine pos $- myFsep [pretty pat, pretty rhs] $$$ ppWhere whereBinds-- pretty (HsInfixDecl pos assoc prec opList) =- blankline $- markLine pos $- mySep ([pretty assoc, int prec]- ++ (punctuate comma . map pretty $ opList))-- pretty (HsForImp pos cconv saf str name typ) =- blankline $- markLine pos $- mySep [text "foreign import", pretty cconv, pretty saf,- text (show str), pretty name, text "::", pretty typ]-- pretty (HsForExp pos cconv str name typ) =- blankline $- markLine pos $- mySep [text "foreign export", pretty cconv,- text (show str), pretty name, text "::", pretty typ]--instance Pretty HsAssoc where- pretty HsAssocNone = text "infix"- pretty HsAssocLeft = text "infixl"- pretty HsAssocRight = text "infixr"--instance Pretty HsMatch where- pretty (HsMatch pos f ps rhs whereBinds) =- markLine pos $- myFsep (lhs ++ [pretty rhs])- $$$ ppWhere whereBinds- where- lhs = case ps of- l:r:ps' | isSymbolName f ->- let hd = [pretty l, ppHsName f, pretty r] in- if null ps' then hd- else parens (myFsep hd) : map (prettyPrec 2) ps'- _ -> pretty f : map (prettyPrec 2) ps--ppWhere :: HsBinds -> Doc-ppWhere (HsBDecls []) = empty-ppWhere (HsBDecls l) = nest 2 (text "where" $$$ ppBody whereIndent (map pretty l))-ppWhere (HsIPBinds b) = nest 2 (text "where" $$$ ppBody whereIndent (map pretty b))--------------------------- FFI stuff --------------------------------------instance Pretty HsSafety where- pretty PlayRisky = text "unsafe"- pretty (PlaySafe b) = text $ if b then "threadsafe" else "safe"--instance Pretty HsCallConv where- pretty StdCall = text "stdcall"- pretty CCall = text "ccall"--------------------------- Data & Newtype Bodies --------------------------instance Pretty HsQualConDecl where- pretty (HsQualConDecl _pos tvs ctxt con) =- myFsep [ppForall (Just tvs), ppHsContext ctxt, pretty con]--instance Pretty HsGadtDecl where- pretty (HsGadtDecl _pos name ty) =- myFsep [pretty name, text "::", pretty ty]--instance Pretty HsConDecl where- pretty (HsRecDecl name fieldList) =- pretty name <> (braceList . map ppField $ fieldList)-- pretty (HsConDecl name@(HsSymbol _) [l, r]) =- myFsep [prettyPrec prec_btype l, ppHsName name,- prettyPrec prec_btype r]- pretty (HsConDecl name typeList) =- mySep $ ppHsName name : map (prettyPrec prec_atype) typeList--ppField :: ([HsName],HsBangType) -> Doc-ppField (names, ty) =- myFsepSimple $ (punctuate comma . map pretty $ names) ++- [text "::", pretty ty]--instance Pretty HsBangType where- prettyPrec _ (HsBangedTy ty) = char '!' <> ppHsAType ty- prettyPrec p (HsUnBangedTy ty) = prettyPrec p ty--ppHsDeriving :: [HsQName] -> Doc-ppHsDeriving [] = empty-ppHsDeriving [d] = text "deriving" <+> ppHsQName d-ppHsDeriving ds = text "deriving" <+> parenList (map ppHsQName ds)--------------------------- Types --------------------------{--instance Pretty HsQualType where- pretty (HsQualType context htype) =- myFsep [ppHsContext context, pretty htype]--}-ppHsBType :: HsType -> Doc-ppHsBType = prettyPrec prec_btype--ppHsAType :: HsType -> Doc-ppHsAType = prettyPrec prec_atype---- precedences for types-prec_btype, prec_atype :: Int-prec_btype = 1 -- left argument of ->,- -- or either argument of an infix data constructor-prec_atype = 2 -- argument of type or data constructor, or of a class--instance Pretty HsType where- prettyPrec p (HsTyForall mtvs ctxt htype) = parensIf (p > 0) $- myFsep [ppForall mtvs, ppHsContext ctxt, pretty htype]- prettyPrec p (HsTyFun a b) = parensIf (p > 0) $- myFsep [ppHsBType a, text "->", pretty b]- prettyPrec _ (HsTyTuple bxd l) =- let ds = map pretty l- in case bxd of- Boxed -> parenList ds- Unboxed -> hashParenList ds- prettyPrec p (HsTyApp a b)- | a == list_tycon = brackets $ pretty b -- special case- | otherwise = parensIf (p > prec_btype) $- myFsep [pretty a, ppHsAType b]- prettyPrec _ (HsTyVar name) = pretty name- prettyPrec _ (HsTyCon name) = pretty name- prettyPrec _ (HsTyPred asst) = pretty asst- prettyPrec _ (HsTyInfix a op b) = parens (myFsep [pretty op, pretty a, pretty b])---ppForall :: Maybe [HsName] -> Doc-ppForall Nothing = empty-ppForall (Just []) = empty-ppForall (Just vs) = myFsep (text "forall" : map pretty vs ++ [char '.'])--------------------- Functional Dependencies --------------------instance Pretty HsFunDep where- pretty (HsFunDep from to) =- myFsep $ map pretty from ++ [text "->"] ++ map pretty to---ppFunDeps :: [HsFunDep] -> Doc-ppFunDeps [] = empty-ppFunDeps fds = myFsep $ (char '|':) . punctuate comma . map pretty $ fds--------------------------- Expressions --------------------------instance Pretty HsRhs where- pretty (HsUnGuardedRhs e) = equals <+> pretty e- pretty (HsGuardedRhss guardList) = myVcat . map pretty $ guardList--instance Pretty HsGuardedRhs where- pretty (HsGuardedRhs _pos guards ppBody) =- myFsep $ [char '|'] ++ (punctuate comma . map pretty $ guards) ++ [equals, pretty ppBody]--instance Pretty HsLiteral where- pretty (HsInt i) = integer i- pretty (HsChar c) = text (show c)- pretty (HsString s) = text (show s)- pretty (HsFrac r) = double (fromRational r)- -- GHC unboxed literals:- pretty (HsCharPrim c) = text (show c) <> char '#'- pretty (HsStringPrim s) = text (show s) <> char '#'- pretty (HsIntPrim i) = integer i <> char '#'- pretty (HsFloatPrim r) = float (fromRational r) <> char '#'- pretty (HsDoublePrim r) = double (fromRational r) <> text "##"--instance Pretty HsExp where- pretty (HsLit l) = pretty l- -- lambda stuff- pretty (HsInfixApp a op b) = myFsep [pretty a, pretty op, pretty b]- pretty (HsNegApp e) = myFsep [char '-', pretty e]- pretty (HsApp a b) = myFsep [pretty a, pretty b]- pretty (HsLambda _loc expList ppBody) = myFsep $- char '\\' : map pretty expList ++ [text "->", pretty ppBody]- -- keywords- -- two cases for lets- pretty (HsLet (HsBDecls declList) letBody) =- ppLetExp declList letBody- pretty (HsLet (HsIPBinds bindList) letBody) =- ppLetExp bindList letBody- pretty (HsDLet bindList letBody) =- myFsep [text "dlet" <+> ppBody letIndent (map pretty bindList),- text "in", pretty letBody]- pretty (HsWith exp bindList) =- pretty exp $$$ ppWith bindList- pretty (HsIf cond thenexp elsexp) =- myFsep [text "if", pretty cond,- text "then", pretty thenexp,- text "else", pretty elsexp]- pretty (HsCase cond altList) =- myFsep [text "case", pretty cond, text "of"]- $$$ ppBody caseIndent (map pretty altList)- pretty (HsDo stmtList) =- text "do" $$$ ppBody doIndent (map pretty stmtList)- pretty (HsMDo stmtList) =- text "mdo" $$$ ppBody doIndent (map pretty stmtList)- -- Constructors & Vars- pretty (HsVar name) = pretty name- pretty (HsIPVar ipname) = pretty ipname- pretty (HsCon name) = pretty name- pretty (HsTuple expList) = parenList . map pretty $ expList- -- weird stuff- pretty (HsParen e) = parens . pretty $ e- pretty (HsLeftSection e op) = parens (pretty e <+> pretty op)- pretty (HsRightSection op e) = parens (pretty op <+> pretty e)- pretty (HsRecConstr c fieldList) =- pretty c <> (braceList . map pretty $ fieldList)- pretty (HsRecUpdate e fieldList) =- pretty e <> (braceList . map pretty $ fieldList)- -- patterns- -- special case that would otherwise be buggy- pretty (HsAsPat name (HsIrrPat e)) =- myFsep [pretty name <> char '@', char '~' <> pretty e]- pretty (HsAsPat name e) = hcat [pretty name, char '@', pretty e]- pretty HsWildCard = char '_'- pretty (HsIrrPat e) = char '~' <> pretty e- -- Lists- pretty (HsList list) =- bracketList . punctuate comma . map pretty $ list- pretty (HsEnumFrom e) =- bracketList [pretty e, text ".."]- pretty (HsEnumFromTo from to) =- bracketList [pretty from, text "..", pretty to]- pretty (HsEnumFromThen from thenE) =- bracketList [pretty from <> comma, pretty thenE, text ".."]- pretty (HsEnumFromThenTo from thenE to) =- bracketList [pretty from <> comma, pretty thenE,- text "..", pretty to]- pretty (HsListComp e stmtList) =- bracketList ([pretty e, char '|']- ++ (punctuate comma . map pretty $ stmtList))- pretty (HsExpTypeSig _pos e ty) =- myFsep [pretty e, text "::", pretty ty]- -- Template Haskell- pretty (HsReifyExp r) = pretty r- pretty (HsBracketExp b) = pretty b- pretty (HsSpliceExp s) = pretty s- -- regular patterns- pretty (HsRPats _ rs) =- myFsep $ text "[/" : map pretty rs ++ [text "/]"]- pretty (HsSeqRP rs) =- myFsep $ text "(/" : map pretty rs ++ [text "/)"]- pretty (HsStarRP r) = pretty r <> char '*'- pretty (HsStarGRP r) = pretty r <> text "*!"- pretty (HsPlusRP r) = pretty r <> char '+'- pretty (HsPlusGRP r) = pretty r <> text "+!"- pretty (HsOptRP r) = pretty r <> char '?'- pretty (HsOptGRP r) = pretty r <> text "?!"- pretty (HsEitherRP r1 r2) = parens . myFsep $- [pretty r1, char '|', pretty r2]- -- special case that would otherwise be buggy- pretty (HsCAsRP n (HsIrrPat e)) =- myFsep [pretty n <> text "@:", char '~' <> pretty e]- pretty (HsCAsRP n r) = hcat [pretty n, text "@:", pretty r]- -- Hsx- pretty (HsXTag _ n attrs mattr cs) =- let ax = maybe [] (return . pretty) mattr- in hcat $- (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [char '>']):- map pretty cs ++ [myFsep $ [text "</" <> pretty n, char '>']]- pretty (HsXETag _ n attrs mattr) =- let ax = maybe [] (return . pretty) mattr- in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [text "/>"]- pretty (HsXPcdata s) = text s- pretty (HsXExpTag e) =- myFsep $ [text "<%", pretty e, text "%>"]--instance Pretty HsXAttr where- pretty (HsXAttr n v) =- myFsep [pretty n, char '=', pretty v]--instance Pretty HsXName where- pretty (HsXName n) = text n- pretty (HsXDomName d n) = text d <> char ':' <> text n----ppLetExp :: [HsDecl] -> HsExp -> Doc-ppLetExp l b = myFsep [text "let" <+> ppBody letIndent (map pretty l),- text "in", pretty b]--ppWith binds = nest 2 (text "with" $$$ ppBody withIndent (map pretty binds))-withIndent = whereIndent----------------------- Template Haskell --------------------------instance Pretty HsReify where- pretty (HsReifyDecl name) = ppReify "reifyDecl" name- pretty (HsReifyType name) = ppReify "reifyType" name- pretty (HsReifyFixity name) = ppReify "reifyFixity" name--ppReify t n = myFsep [text t, pretty n]--instance Pretty HsBracket where- pretty (HsExpBracket e) = ppBracket "[|" e- pretty (HsPatBracket p) = ppBracket "[p|" p- pretty (HsTypeBracket t) = ppBracket "[t|" t- pretty (HsDeclBracket d) =- myFsep $ text "[d|" : map pretty d ++ [text "|]"]--ppBracket o x = myFsep [text o, pretty x, text "|]"]--instance Pretty HsSplice where- pretty (HsIdSplice s) = char '$' <> text s- pretty (HsParenSplice e) =- myFsep [text "$(", pretty e, char ')']--------------------------- Patterns -------------------------------instance Pretty HsPat where- prettyPrec _ (HsPVar name) = pretty name- prettyPrec _ (HsPLit lit) = pretty lit- prettyPrec _ (HsPNeg p) = myFsep [char '-', pretty p]- prettyPrec p (HsPInfixApp a op b) = parensIf (p > 0) $- myFsep [pretty a, pretty (HsQConOp op), pretty b]- prettyPrec p (HsPApp n ps) = parensIf (p > 1) $- myFsep (pretty n : map pretty ps)- prettyPrec _ (HsPTuple ps) = parenList . map pretty $ ps- prettyPrec _ (HsPList ps) =- bracketList . punctuate comma . map pretty $ ps- prettyPrec _ (HsPParen p) = parens . pretty $ p- prettyPrec _ (HsPRec c fields) =- pretty c <> (braceList . map pretty $ fields)- -- special case that would otherwise be buggy- prettyPrec _ (HsPAsPat name (HsPIrrPat pat)) =- myFsep [pretty name <> char '@', char '~' <> pretty pat]- prettyPrec _ (HsPAsPat name pat) =- hcat [pretty name, char '@', pretty pat]- prettyPrec _ HsPWildCard = char '_'- prettyPrec _ (HsPIrrPat pat) = char '~' <> pretty pat- prettyPrec _ (HsPRPat _ rs) =- myFsep $ text "[/" : map pretty rs ++ [text "/]"]- prettyPrec _ (HsPatTypeSig _pos pat ty) =- myFsep [pretty pat, text "::", pretty ty]-- -- Hsx- prettyPrec _ (HsPXTag _ n attrs mattr cp) =- let ap = maybe [] (return . pretty) mattr- in hcat $ -- TODO: should not introduce blanks- (myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [char '>']):- prettyChildren cp ++ [myFsep $ [text "</" <> pretty n, char '>']]- prettyPrec _ (HsPXETag _ n attrs mattr) =- let ap = maybe [] (return . pretty) mattr- in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [text "/>"]- prettyPrec _ (HsPXPcdata s) = text s- prettyPrec _ (HsPXPatTag p) =- myFsep $ [text "<%", pretty p, text "%>"]--prettyChildren :: HsPat -> [Doc]-prettyChildren p = case p of- HsPList ps -> map prettyChild ps- HsPRPat _ _ -> [pretty p]- _ -> error "The pattern representing the children of an xml pattern \- \ should always be a list."--prettyChild :: HsPat -> Doc-prettyChild p = case p of- HsPXTag _ _ _ _ _ -> pretty p- HsPXETag _ _ _ _ -> pretty p- HsPXPatTag _ -> pretty p- HsPXPcdata _ -> pretty p- _ -> pretty $ HsPXPatTag p--instance Pretty HsPXAttr where- pretty (HsPXAttr n p) =- myFsep [pretty n, char '=', pretty p]--instance Pretty HsPatField where- pretty (HsPFieldPat name pat) =- myFsep [pretty name, equals, pretty pat]----------------------- Regular Patterns ---------------------------instance Pretty HsRPat where- pretty (HsRPStar r) = pretty r <> char '*'- pretty (HsRPStarG r) = pretty r <> text "*!"- pretty (HsRPPlus r) = pretty r <> char '+'- pretty (HsRPPlusG r) = pretty r <> text "+!"- pretty (HsRPOpt r) = pretty r <> char '?'- pretty (HsRPOptG r) = pretty r <> text "?!"- pretty (HsRPEither r1 r2) = parens . myFsep $- [pretty r1, char '|', pretty r2]- pretty (HsRPSeq rs) =- myFsep $ text "(/" : map pretty rs ++ [text "/)"]- -- special case that would otherwise be buggy- pretty (HsRPCAs n (HsRPPat (HsPIrrPat p))) =- myFsep [pretty n <> text "@:", char '~' <> pretty p]- pretty (HsRPCAs n r) = hcat [pretty n, text "@:", pretty r]- -- special case that would otherwise be buggy- pretty (HsRPAs n (HsRPPat (HsPIrrPat p))) =- myFsep [pretty n <> text "@:", char '~' <> pretty p]- pretty (HsRPAs n r) = hcat [pretty n, char '@', pretty r]- pretty (HsRPPat p) = pretty p- pretty (HsRPParen rp) = parens . pretty $ rp--------------------------- Case bodies --------------------------instance Pretty HsAlt where- pretty (HsAlt _pos e gAlts binds) =- pretty e <+> pretty gAlts $$$ ppWhere binds--instance Pretty HsGuardedAlts where- pretty (HsUnGuardedAlt e) = text "->" <+> pretty e- pretty (HsGuardedAlts altList) = myVcat . map pretty $ altList--instance Pretty HsGuardedAlt where- pretty (HsGuardedAlt _pos guards body) =- myFsep $ char '|': (punctuate comma . map pretty $ guards) ++ [text "->", pretty body]--------------------------- Statements in monads, guards & list comprehensions ------instance Pretty HsStmt where- pretty (HsGenerator _loc e from) =- pretty e <+> text "<-" <+> pretty from- pretty (HsQualifier e) = pretty e- -- two cases for lets- pretty (HsLetStmt (HsBDecls declList)) =- ppLetStmt declList- pretty (HsLetStmt (HsIPBinds bindList)) =- ppLetStmt bindList--ppLetStmt l = text "let" $$$ ppBody letIndent (map pretty l)--------------------------- Record updates-instance Pretty HsFieldUpdate where- pretty (HsFieldUpdate name e) =- myFsep [pretty name, equals, pretty e]--------------------------- Names --------------------------instance Pretty HsQOp where- pretty (HsQVarOp n) = ppHsQNameInfix n- pretty (HsQConOp n) = ppHsQNameInfix n--ppHsQNameInfix :: HsQName -> Doc-ppHsQNameInfix name- | isSymbolName (getName name) = ppHsQName name- | otherwise = char '`' <> ppHsQName name <> char '`'--instance Pretty HsQName where- pretty name = case name of- UnQual (HsSymbol ('#':_)) -> char '(' <+> ppHsQName name <+> char ')'- _ -> parensIf (isSymbolName (getName name)) (ppHsQName name)--ppHsQName :: HsQName -> Doc-ppHsQName (UnQual name) = ppHsName name-ppHsQName (Qual m name) = pretty m <> char '.' <> ppHsName name-ppHsQName (Special sym) = text (specialName sym)--instance Pretty HsOp where- pretty (HsVarOp n) = ppHsNameInfix n- pretty (HsConOp n) = ppHsNameInfix n--ppHsNameInfix :: HsName -> Doc-ppHsNameInfix name- | isSymbolName name = ppHsName name- | otherwise = char '`' <> ppHsName name <> char '`'--instance Pretty HsName where- pretty name = case name of- HsSymbol ('#':_) -> char '(' <+> ppHsName name <+> char ')'- _ -> parensIf (isSymbolName name) (ppHsName name)--ppHsName :: HsName -> Doc-ppHsName (HsIdent s) = text s-ppHsName (HsSymbol s) = text s--instance Pretty HsIPName where- pretty (HsIPDup s) = char '?' <> text s- pretty (HsIPLin s) = char '%' <> text s--instance Pretty HsIPBind where- pretty (HsIPBind _loc ipname exp) =- myFsep [pretty ipname, equals, pretty exp]--instance Pretty HsCName where- pretty (HsVarName n) = pretty n- pretty (HsConName n) = pretty n--isSymbolName :: HsName -> Bool-isSymbolName (HsSymbol _) = True-isSymbolName _ = False--getName :: HsQName -> HsName-getName (UnQual s) = s-getName (Qual _ s) = s-getName (Special HsCons) = HsSymbol ":"-getName (Special HsFunCon) = HsSymbol "->"-getName (Special s) = HsIdent (specialName s)--specialName :: HsSpecialCon -> String-specialName HsUnitCon = "()"-specialName HsListCon = "[]"-specialName HsFunCon = "->"-specialName (HsTupleCon n) = "(" ++ replicate (n-1) ',' ++ ")"-specialName HsCons = ":"--ppHsContext :: HsContext -> Doc-ppHsContext [] = empty-ppHsContext context = mySep [parenList (map pretty context), text "=>"]---- hacked for multi-parameter type classes-instance Pretty HsAsst where- pretty (HsClassA a ts) = myFsep $ ppHsQName a : map ppHsAType ts- pretty (HsIParam i t) = myFsep $ [pretty i, text "::", pretty t]--------------------------- pp utils --------------------------maybePP :: (a -> Doc) -> Maybe a -> Doc-maybePP pp Nothing = empty-maybePP pp (Just a) = pp a--parenList :: [Doc] -> Doc-parenList = parens . myFsepSimple . punctuate comma--hashParenList :: [Doc] -> Doc-hashParenList = hashParens . myFsepSimple . punctuate comma- where hashParens = parens . hashes- hashes = \doc -> char '#' <> doc <> char '#'--braceList :: [Doc] -> Doc-braceList = braces . myFsepSimple . punctuate comma--bracketList :: [Doc] -> Doc-bracketList = brackets . myFsepSimple---- Wrap in braces and semicolons, with an extra space at the start in--- case the first doc begins with "-", which would be scanned as {--flatBlock :: [Doc] -> Doc-flatBlock = braces . (space <>) . hsep . punctuate semi---- Same, but put each thing on a separate line-prettyBlock :: [Doc] -> Doc-prettyBlock = braces . (space <>) . vcat . punctuate semi---- Monadic PP Combinators -- these examine the env--blankline :: Doc -> Doc-blankline dl = do{e<-getPPEnv;if spacing e && layout e /= PPNoLayout- then space $$ dl else dl}-topLevel :: Doc -> [Doc] -> Doc-topLevel header dl = do- e <- fmap layout getPPEnv- case e of- PPOffsideRule -> header $$ vcat dl- PPSemiColon -> header $$ prettyBlock dl- PPInLine -> header $$ prettyBlock dl- PPNoLayout -> header <+> flatBlock dl--ppBody :: (PPHsMode -> Int) -> [Doc] -> Doc-ppBody f dl = do- e <- fmap layout getPPEnv- case e of PPOffsideRule -> indent- PPSemiColon -> indentExplicit- _ -> flatBlock dl- where- indent = do{i <-fmap f getPPEnv;nest i . vcat $ dl}- indentExplicit = do {i <- fmap f getPPEnv;- nest i . prettyBlock $ dl}--($$$) :: Doc -> Doc -> Doc-a $$$ b = layoutChoice (a $$) (a <+>) b--mySep :: [Doc] -> Doc-mySep = layoutChoice mySep' hsep- where- -- ensure paragraph fills with indentation.- mySep' [x] = x- mySep' (x:xs) = x <+> fsep xs- mySep' [] = error "Internal error: mySep"--myVcat :: [Doc] -> Doc-myVcat = layoutChoice vcat hsep--myFsepSimple :: [Doc] -> Doc-myFsepSimple = layoutChoice fsep hsep---- same, except that continuation lines are indented,--- which is necessary to avoid triggering the offside rule.-myFsep :: [Doc] -> Doc-myFsep = layoutChoice fsep' hsep- where fsep' [] = empty- fsep' (d:ds) = do- e <- getPPEnv- let n = onsideIndent e- nest n (fsep (nest (-n) d:ds))--layoutChoice :: (a -> Doc) -> (a -> Doc) -> a -> Doc-layoutChoice a b dl = do e <- getPPEnv- if layout e == PPOffsideRule ||- layout e == PPSemiColon- then a dl else b dl---- Prefix something with a LINE pragma, if requested.--- GHC's LINE pragma actually sets the current line number to n-1, so--- that the following line is line n. But if there's no newline before--- the line we're talking about, we need to compensate by adding 1.--markLine :: SrcLoc -> Doc -> Doc-markLine loc doc = do- e <- getPPEnv- let y = srcLine loc- let line l =- text ("{-# LINE " ++ show l ++ " \"" ++ srcFilename loc ++ "\" #-}")- if linePragmas e then layoutChoice (line y $$) (line (y+1) <+>) doc- else doc
− Language/Haskell/Hsx/Syntax.hs
@@ -1,794 +0,0 @@-{-# OPTIONS_GHC -fglasgow-exts -cpp #-}--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Hsx.Syntax--- Original : Language.Haskell.Syntax--- Copyright : (c) Niklas Broberg 2004,--- (c) The GHC Team, 1997-2000--- License : BSD-style (see the file LICENSE.txt)--- --- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se--- Stability : experimental--- Portability : portable------ A suite of datatypes describing the abstract syntax of Haskell 98--- <http://www.haskell.org/onlinereport/> plus some extensions:------ * multi-parameter type classes with functional dependencies------ * parameters of type class assertions are unrestricted------ * 'forall' types as universal and existential quantification------ * pattern guards------ * implicit parameters------ * generalised algebraic data types------ * template haskell------ * empty data type declarations------ * unboxed tuples------ * regular patterns (HaRP)------ * HSP-style XML expressions and patterns (HSP)------ Also worth noting is that (n+k) patterns from Haskell 98 are not supported--------------------------------------------------------------------------------module Language.Haskell.Hsx.Syntax (- -- * Modules- HsModule(..), HsExportSpec(..),- HsImportDecl(..), HsImportSpec(..), HsAssoc(..),- -- * Declarations- HsDecl(..), HsBinds(..), HsIPBind(..), - HsGadtDecl(..), HsConDecl(..), HsQualConDecl(..), HsBangType(..),- HsMatch(..), HsRhs(..), HsGuardedRhs(..),- -- * Class Assertions and Contexts- HsContext, HsFunDep(..), HsAsst(..),- -- * Types- HsType(..), HsBoxed(..),- -- * Expressions- HsExp(..), HsStmt(..), HsFieldUpdate(..),- HsAlt(..), HsGuardedAlts(..), HsGuardedAlt(..), - -- * Patterns- HsPat(..), HsPatField(..),- -- * Literals- HsLiteral(..),- -- * Variables, Constructors and Operators- Module(..), HsQName(..), HsName(..), HsQOp(..), HsOp(..),- HsSpecialCon(..), HsCName(..), HsIPName(..),- - -- * Template Haskell- HsReify(..), HsBracket(..), HsSplice(..),- - -- * HaRP- HsRPat(..),- - -- * Hsx- HsXAttr(..), HsXName(..), HsPXAttr(..),-- -- * FFI- HsSafety(..), HsCallConv(..),-- -- * Builtin names-- -- ** Modules- prelude_mod, main_mod,- -- ** Main function of a program- main_name,- -- ** Constructors- unit_con_name, tuple_con_name, list_cons_name,- unit_con, tuple_con,- -- ** Special identifiers- as_name, qualified_name, hiding_name, minus_name, pling_name, dot_name,- export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name,- -- ** Type constructors- unit_tycon_name, fun_tycon_name, list_tycon_name, tuple_tycon_name,- unit_tycon, fun_tycon, list_tycon, tuple_tycon,-- -- * Source coordinates- SrcLoc(..),- ) where---#ifdef __GLASGOW_HASKELL__-import Data.Generics.Basics-import Data.Generics.Instances-#endif---- | A position in the source.-data SrcLoc = SrcLoc {- srcFilename :: String,- srcLine :: Int,- srcColumn :: Int- }-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif- --- | The name of a Haskell module.-newtype Module = Module String-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Constructors with special syntax.--- These names are never qualified, and always refer to builtin type or--- data constructors.--data HsSpecialCon- = HsUnitCon -- ^ unit type and data constructor @()@- | HsListCon -- ^ list type constructor @[]@- | HsFunCon -- ^ function type constructor @->@- | HsTupleCon Int -- ^ /n/-ary tuple type and data- -- constructors @(,)@ etc- | HsCons -- ^ list data constructor @(:)@-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | This type is used to represent qualified variables, and also--- qualified constructors.-data HsQName- = Qual Module HsName -- ^ name qualified with a module name- | UnQual HsName -- ^ unqualified name- | Special HsSpecialCon -- ^ built-in constructor with special syntax-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | This type is used to represent variables, and also constructors.-data HsName- = HsIdent String -- ^ /varid/ or /conid/.- | HsSymbol String -- ^ /varsym/ or /consym/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | This type is used to represent implicit parameter names.-data HsIPName- = HsIPDup String -- ?x- | HsIPLin String -- %x-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Possibly qualified infix operators (/qop/), appearing in expressions.-data HsQOp- = HsQVarOp HsQName -- ^ variable operator (/qvarop/)- | HsQConOp HsQName -- ^ constructor operator (/qconop/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | Operators, appearing in @infix@ declarations.-data HsOp- = HsVarOp HsName -- ^ variable operator (/varop/)- | HsConOp HsName -- ^ constructor operator (/conop/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A name (/cname/) of a component of a class or data type in an @import@--- or export specification.-data HsCName- = HsVarName HsName -- ^ name of a method or field- | HsConName HsName -- ^ name of a data constructor-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Ord,Show,Typeable,Data)-#else- deriving (Eq,Ord,Show)-#endif---- | A Haskell source module.-data HsModule = HsModule SrcLoc Module (Maybe [HsExportSpec])- [HsImportDecl] [HsDecl]-#ifdef __GLASGOW_HASKELL__- deriving (Show,Typeable,Data)-#else- deriving (Show)-#endif---- | Export specification.-data HsExportSpec- = HsEVar HsQName -- ^ variable- | HsEAbs HsQName -- ^ @T@:- -- a class or datatype exported abstractly,- -- or a type synonym.- | HsEThingAll HsQName -- ^ @T(..)@:- -- a class exported with all of its methods, or- -- a datatype exported with all of its constructors.- | HsEThingWith HsQName [HsCName] -- ^ @T(C_1,...,C_n)@:- -- a class exported with some of its methods, or- -- a datatype exported with some of its constructors.- | HsEModuleContents Module -- ^ @module M@:- -- re-export a module.-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | Import declaration.-data HsImportDecl = HsImportDecl- { importLoc :: SrcLoc -- ^ position of the @import@ keyword.- , importModule :: Module -- ^ name of the module imported.- , importQualified :: Bool -- ^ imported @qualified@?- , importAs :: Maybe Module -- ^ optional alias name in an- -- @as@ clause.- , importSpecs :: Maybe (Bool,[HsImportSpec])- -- ^ optional list of import specifications.- -- The 'Bool' is 'True' if the names are excluded- -- by @hiding@.- }-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | Import specification.-data HsImportSpec- = HsIVar HsName -- ^ variable- | HsIAbs HsName -- ^ @T@:- -- the name of a class, datatype or type synonym.- | HsIThingAll HsName -- ^ @T(..)@:- -- a class imported with all of its methods, or- -- a datatype imported with all of its constructors.- | HsIThingWith HsName [HsCName] -- ^ @T(C_1,...,C_n)@:- -- a class imported with some of its methods, or- -- a datatype imported with some of its constructors.-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | Associativity of an operator.-data HsAssoc- = HsAssocNone -- ^ non-associative operator (declared with @infix@)- | HsAssocLeft -- ^ left-associative operator (declared with @infixl@).- | HsAssocRight -- ^ right-associative operator (declared with @infixr@)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsDecl- = HsTypeDecl SrcLoc HsName [HsName] HsType- | HsDataDecl SrcLoc HsContext HsName [HsName] [HsQualConDecl] [HsQName]- | HsGDataDecl SrcLoc HsContext HsName [HsName] [HsGadtDecl] {-no deriving-}- | HsInfixDecl SrcLoc HsAssoc Int [HsOp]- | HsNewTypeDecl SrcLoc HsContext HsName [HsName] HsQualConDecl [HsQName]- | HsClassDecl SrcLoc HsContext HsName [HsName] [HsFunDep] [HsDecl]- | HsInstDecl SrcLoc HsContext HsQName [HsType] [HsDecl]- | HsDefaultDecl SrcLoc [HsType]- | HsSpliceDecl SrcLoc HsSplice- | HsTypeSig SrcLoc [HsName] HsType- | HsFunBind [HsMatch]- | HsPatBind SrcLoc HsPat HsRhs {-where-} HsBinds- | HsForImp SrcLoc HsCallConv HsSafety String HsName HsType- | HsForExp SrcLoc HsCallConv String HsName HsType-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsBinds- = HsBDecls [HsDecl]- | HsIPBinds [HsIPBind]-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsIPBind = HsIPBind SrcLoc HsIPName HsExp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | Clauses of a function binding.-data HsMatch- = HsMatch SrcLoc HsName [HsPat] HsRhs {-where-} HsBinds-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsQualConDecl- = HsQualConDecl SrcLoc - {-forall-} [HsName] {- . -} HsContext- {- => -} HsConDecl-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsGadtDecl - = HsGadtDecl SrcLoc HsName HsType-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | Declaration of a data constructor.-data HsConDecl- = HsConDecl HsName [HsBangType]- -- ^ ordinary data constructor- | HsRecDecl HsName [([HsName],HsBangType)]- -- ^ record constructor-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | The type of a constructor argument or field, optionally including--- a strictness annotation.-data HsBangType- = HsBangedTy HsType -- ^ strict component, marked with \"@!@\"- | HsUnBangedTy HsType -- ^ non-strict component-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | The right hand side of a function or pattern binding.-data HsRhs- = HsUnGuardedRhs HsExp -- ^ unguarded right hand side (/exp/)- | HsGuardedRhss [HsGuardedRhs]- -- ^ guarded right hand side (/gdrhs/)-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--- | A guarded right hand side @|@ /exp/ @=@ /exp/.--- The first expression will be Boolean-valued.-data HsGuardedRhs- = HsGuardedRhs SrcLoc [HsStmt] HsExp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | A type qualified with a context.--- An unqualified type has an empty context.--data HsType- = HsTyForall - (Maybe [HsName])- HsContext- HsType- | HsTyFun HsType HsType -- ^ function type- | HsTyTuple HsBoxed [HsType] -- ^ tuple type, possibly boxed- | HsTyApp HsType HsType -- ^ application of a type constructor- | HsTyVar HsName -- ^ type variable- | HsTyCon HsQName -- ^ named type or type constructor- | HsTyPred HsAsst -- ^ assertion of an implicit parameter- | HsTyInfix HsType HsQName HsType -- ^ infix type constructor-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsBoxed = Boxed | Unboxed-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif----- | A functional dependency, given on the form--- l1 l2 ... ln -> r2 r3 .. rn-data HsFunDep- = HsFunDep [HsName] [HsName]-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---type HsContext = [HsAsst]---- | Class assertions.--- In Haskell 98, the argument would be a /tyvar/, but this definition--- allows multiple parameters, and allows them to be /type/s.--- Also extended with support for implicit parameters.-data HsAsst = HsClassA HsQName [HsType]- | HsIParam HsIPName HsType-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | /literal/--- Values of this type hold the abstract value of the literal, not the--- precise string representation used. For example, @10@, @0o12@ and @0xa@--- have the same representation.-data HsLiteral- = HsChar Char -- ^ character literal- | HsString String -- ^ string literal- | HsInt Integer -- ^ integer literal- | HsFrac Rational -- ^ floating point literal- | HsCharPrim Char -- ^ GHC unboxed character literal- | HsStringPrim String -- ^ GHC unboxed string literal- | HsIntPrim Integer -- ^ GHC unboxed integer literal- | HsFloatPrim Rational -- ^ GHC unboxed float literal- | HsDoublePrim Rational -- ^ GHC unboxed double literal-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | Haskell expressions.------ /Notes:/------ * Because it is difficult for parsers to distinguish patterns from--- expressions, they typically parse them in the same way and then check--- that they have the appropriate form. Hence the expression type--- includes some forms that are found only in patterns. After these--- checks, these constructors should not be used.------ * The parser does not take precedence and associativity into account,--- so it will leave 'HsInfixApp's associated to the left.------ * The 'Language.Haskell.Pretty.Pretty' instance for 'HsExp' does not--- add parentheses in printing.--data HsExp- = HsVar HsQName -- ^ variable- | HsIPVar HsIPName -- ^ implicit parameter variable- | HsCon HsQName -- ^ data constructor- | HsLit HsLiteral -- ^ literal constant- | HsInfixApp HsExp HsQOp HsExp -- ^ infix application- | HsApp HsExp HsExp -- ^ ordinary application- | HsNegApp HsExp -- ^ negation expression @-@ /exp/- | HsLambda SrcLoc [HsPat] HsExp -- ^ lambda expression- | HsLet HsBinds HsExp -- ^ local declarations with @let@- | HsDLet [HsIPBind] HsExp -- ^ local declarations of implicit parameters (hugs)- | HsWith HsExp [HsIPBind] -- ^ local declarations of implicit parameters- | HsIf HsExp HsExp HsExp -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/- | HsCase HsExp [HsAlt] -- ^ @case@ /exp/ @of@ /alts/- | HsDo [HsStmt] -- ^ @do@-expression:- -- the last statement in the list- -- should be an expression.- | HsMDo [HsStmt] -- ^ @mdo@-expression- | HsTuple [HsExp] -- ^ tuple expression- | HsList [HsExp] -- ^ list expression- | HsParen HsExp -- ^ parenthesized expression- | HsLeftSection HsExp HsQOp -- ^ left section @(@/exp/ /qop/@)@- | HsRightSection HsQOp HsExp -- ^ right section @(@/qop/ /exp/@)@- | HsRecConstr HsQName [HsFieldUpdate]- -- ^ record construction expression- | HsRecUpdate HsExp [HsFieldUpdate]- -- ^ record update expression- | HsEnumFrom HsExp -- ^ unbounded arithmetic sequence,- -- incrementing by 1- | HsEnumFromTo HsExp HsExp -- ^ bounded arithmetic sequence,- -- incrementing by 1- | HsEnumFromThen HsExp HsExp -- ^ unbounded arithmetic sequence,- -- with first two elements given- | HsEnumFromThenTo HsExp HsExp HsExp- -- ^ bounded arithmetic sequence,- -- with first two elements given- | HsListComp HsExp [HsStmt] -- ^ list comprehension- | HsExpTypeSig SrcLoc HsExp HsType- -- ^ expression type signature- | HsAsPat HsName HsExp -- ^ patterns only- | HsWildCard -- ^ patterns only- | HsIrrPat HsExp -- ^ patterns only---- HaRP- | HsRPats SrcLoc [HsExp] -- ^ regular patterns only- | HsSeqRP [HsExp] -- ^ regular patterns only- | HsStarRP HsExp -- ^ regular patterns only- | HsStarGRP HsExp -- ^ regular patterns only- | HsPlusRP HsExp -- ^ regular patterns only- | HsPlusGRP HsExp -- ^ regular patterns only- | HsOptRP HsExp -- ^ regular patterns only- | HsOptGRP HsExp -- ^ regular patterns only- | HsEitherRP HsExp HsExp -- ^ regular patterns only- | HsCAsRP HsName HsExp -- ^ regular patterns only- --- Template Haskell- | HsReifyExp HsReify- | HsBracketExp HsBracket- | HsSpliceExp HsSplice- --- Hsx- | HsXTag SrcLoc HsXName [HsXAttr] (Maybe HsExp) [HsExp]- | HsXETag SrcLoc HsXName [HsXAttr] (Maybe HsExp)- | HsXPcdata String- | HsXExpTag HsExp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsXName - = HsXName String -- <name ...- | HsXDomName String String -- <dom:name ...-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsXAttr = HsXAttr HsXName HsExp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsReify - = HsReifyType HsQName- | HsReifyDecl HsQName- | HsReifyFixity HsQName-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif- -data HsBracket- = HsExpBracket HsExp- | HsPatBracket HsPat- | HsTypeBracket HsType- | HsDeclBracket [HsDecl]-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsSplice- = HsIdSplice String- | HsParenSplice HsExp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif----- FFI stuff-data HsSafety- = PlayRisky- | PlaySafe Bool-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsCallConv- = StdCall- | CCall-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif------ | A pattern, to be matched against a value.-data HsPat- = HsPVar HsName -- ^ variable- | HsPLit HsLiteral -- ^ literal constant- | HsPNeg HsPat -- ^ negated pattern- | HsPInfixApp HsPat HsQName HsPat- -- ^ pattern with infix data constructor- | HsPApp HsQName [HsPat] -- ^ data constructor and argument- -- patterns- | HsPTuple [HsPat] -- ^ tuple pattern- | HsPList [HsPat] -- ^ list pattern- | HsPParen HsPat -- ^ parenthesized pattern- | HsPRec HsQName [HsPatField] -- ^ labelled pattern- | HsPAsPat HsName HsPat -- ^ @\@@-pattern- | HsPWildCard -- ^ wildcard pattern (@_@)- | HsPIrrPat HsPat -- ^ irrefutable pattern (@~@)- | HsPatTypeSig SrcLoc HsPat HsType- -- ^ pattern type signature- --- HaRP- | HsPRPat SrcLoc [HsRPat] -- ^ regular pattern (HaRP)--- Hsx- | HsPXTag SrcLoc HsXName [HsPXAttr] (Maybe HsPat) HsPat- -- ^ XML tag pattern- | HsPXETag SrcLoc HsXName [HsPXAttr] (Maybe HsPat)- -- ^ XML singleton tag pattern- | HsPXPcdata String- -- ^ XML PCDATA pattern- | HsPXPatTag HsPat- -- ^ XML embedded pattern-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | An XML attribute in an XML tag pattern -data HsPXAttr = HsPXAttr HsXName HsPat-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | An entity in a regular pattern (HaRP)-data HsRPat- = HsRPStar HsRPat- | HsRPStarG HsRPat- | HsRPPlus HsRPat- | HsRPPlusG HsRPat- | HsRPOpt HsRPat- | HsRPOptG HsRPat- | HsRPEither HsRPat HsRPat- | HsRPSeq [HsRPat]- | HsRPCAs HsName HsRPat- | HsRPAs HsName HsRPat- | HsRPParen HsRPat- | HsRPPat HsPat-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | An /fpat/ in a labeled record pattern.-data HsPatField- = HsPFieldPat HsQName HsPat-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | This type represents both /stmt/ in a @do@-expression,--- and /qual/ in a list comprehension, as well as /stmt/--- in a pattern guard.-data HsStmt- = HsGenerator SrcLoc HsPat HsExp- -- ^ a generator /pat/ @<-@ /exp/- | HsQualifier HsExp -- ^ an /exp/ by itself: in a @do@-expression,- -- an action whose result is discarded;- -- in a list comprehension, a guard expression- | HsLetStmt HsBinds -- ^ local bindings-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | An /fbind/ in a labeled construction or update.-data HsFieldUpdate- = HsFieldUpdate HsQName HsExp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | An /alt/ in a @case@ expression.-data HsAlt- = HsAlt SrcLoc HsPat HsGuardedAlts HsBinds-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif--data HsGuardedAlts- = HsUnGuardedAlt HsExp -- ^ @->@ /exp/- | HsGuardedAlts [HsGuardedAlt] -- ^ /gdpat/-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---- | A guarded alternative @|@ /stmt/, ... , /stmt/ @->@ /exp/.-data HsGuardedAlt- = HsGuardedAlt SrcLoc [HsStmt] HsExp-#ifdef __GLASGOW_HASKELL__- deriving (Eq,Show,Typeable,Data)-#else- deriving (Eq,Show)-#endif---------------------------------------------------------------------------------- Builtin names.--prelude_mod, main_mod :: Module-prelude_mod = Module "Prelude"-main_mod = Module "Main"--main_name :: HsName-main_name = HsIdent "main"--unit_con_name :: HsQName-unit_con_name = Special HsUnitCon--tuple_con_name :: Int -> HsQName-tuple_con_name i = Special (HsTupleCon (i+1))--list_cons_name :: HsQName-list_cons_name = Special HsCons--unit_con :: HsExp-unit_con = HsCon unit_con_name--tuple_con :: Int -> HsExp-tuple_con i = HsCon (tuple_con_name i)--as_name, qualified_name, hiding_name, minus_name, pling_name, dot_name :: HsName-as_name = HsIdent "as"-qualified_name = HsIdent "qualified"-hiding_name = HsIdent "hiding"-minus_name = HsSymbol "-"-pling_name = HsSymbol "!"-dot_name = HsSymbol "."--export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name :: HsName-export_name = HsIdent "export"-safe_name = HsIdent "safe"-unsafe_name = HsIdent "unsafe"-threadsafe_name = HsIdent "threadsafe"-stdcall_name = HsIdent "stdcall"-ccall_name = HsIdent "ccall"--unit_tycon_name, fun_tycon_name, list_tycon_name :: HsQName-unit_tycon_name = unit_con_name-fun_tycon_name = Special HsFunCon-list_tycon_name = Special HsListCon--tuple_tycon_name :: Int -> HsQName-tuple_tycon_name i = tuple_con_name i--unit_tycon, fun_tycon, list_tycon :: HsType-unit_tycon = HsTyCon unit_tycon_name-fun_tycon = HsTyCon fun_tycon_name-list_tycon = HsTyCon list_tycon_name--tuple_tycon :: Int -> HsType-tuple_tycon i = HsTyCon (tuple_tycon_name i)
− Language/Haskell/Hsx/Transform.hs
@@ -1,1780 +0,0 @@--------------------------------------------------------------------------------- |--- Module : Language.Haskell.Harp.Tranform--- Copyright : (c) Niklas Broberg 2004,--- License : BSD-style (see the file LICENSE.txt)--- --- Maintainer : Niklas Broberg, d00nibro@dtek.chalmers.se--- Stability : experimental--- Portability : portable------ Functions for transforming abstract Haskell code extended with regular --- patterns into semantically equivalent normal abstract Haskell code. In--- other words, we transform away regular patterns.--------------------------------------------------------------------------------module Language.Haskell.Hsx.Transform (- transform -- :: HsModule -> HsModule- ) where--import Language.Haskell.Hsx.Syntax-import Language.Haskell.Hsx.Build-import Data.List (union)--import Debug.Trace (trace)---------------------------------------------------------------------------------- A monad for threading a boolean value through the boilerplate code,--- to signal whether a transformation has taken place or not.--newtype HsxM a = MkHsxM (HsxState -> (a, HsxState))--instance Monad HsxM where- return x = MkHsxM (\s -> (x,s))- (MkHsxM f) >>= k = MkHsxM (\s -> let (a, s') = f s- (MkHsxM f') = k a- in f' s')--getHsxState :: HsxM HsxState-getHsxState = MkHsxM (\s -> (s, s))--setHsxState :: HsxState -> HsxM ()-setHsxState s = MkHsxM (\_ -> ((),s))--instance Functor HsxM where- fmap f hma = do a <- hma- return $ f a---------type HsxState = (Bool, Bool)--initHsxState :: HsxState-initHsxState = (False, False)--setHarpTransformed :: HsxM ()-setHarpTransformed = - do (_,x) <- getHsxState- setHsxState (True,x)--setXmlTransformed :: HsxM ()-setXmlTransformed =- do (h,_) <- getHsxState- setHsxState (h,True)--runHsxM :: HsxM a -> (a, (Bool, Bool))-runHsxM (MkHsxM f) = f initHsxState---------------------------------------------------------------------------------- Traversing and transforming the syntax tree----- | Transform away occurences of regular patterns from an abstract--- Haskell module, preserving semantics.-transform :: HsModule -> HsModule-transform (HsModule s m mes is decls) =- let (decls', (harp, hsx)) = runHsxM $ mapM transformDecl decls- -- We may need to add an import for Match.hs that defines the matcher monad- imps1 = if harp - then (:) $ HsImportDecl s match_mod True- (Just match_qual_mod)- Nothing- else id- imps2 = {- if hsx- then (:) $ HsImportDecl s hsx_data_mod False- Nothing- Nothing- else -} id -- we no longer want to import HSP.Data- in HsModule s m mes (imps1 $ imps2 is) decls'---------------------------------------------------------------------------------- Declarations---- | Transform a declaration by transforming subterms that could--- contain regular patterns.-transformDecl :: HsDecl -> HsxM HsDecl-transformDecl d = case d of- -- Pattern binds can contain regular patterns in the pattern being bound- -- as well as on the right-hand side and in declarations in a where clause- HsPatBind srcloc pat rhs decls -> do- -- Preserve semantics of irrefutable regular patterns by postponing- -- their evaluation to a let-expression on the right-hand side- let ([pat'], rnpss) = unzip $ renameIrrPats [pat]- -- Transform the pattern itself- ([pat''], attrGuards, guards, decls'') <- transformPatterns [pat']- -- Transform the right-hand side, and add any generated guards- -- and let expressions to it- rhs' <- mkRhs srcloc (attrGuards ++ guards) (concat rnpss) rhs - -- Transform declarations in the where clause, adding any generated- -- declarations to it- decls' <- case decls of- HsBDecls ds -> do ds' <- transformLetDecls ds- return $ HsBDecls $ decls'' ++ ds'- _ -> error "Cannot bind implicit parameters in the \- \ \'where\' clause of a function using regular patterns."- return $ HsPatBind srcloc pat'' rhs' decls'-- -- Function binds can contain regular patterns in their matches- HsFunBind ms -> fmap HsFunBind $ mapM transformMatch ms- -- Instance declarations can contain regular patterns in the- -- declarations of functions inside it- HsInstDecl s c n ts decls ->- fmap (HsInstDecl s c n ts) $ mapM transformDecl decls- -- Class declarations can contain regular patterns in the- -- declarations of automatically instantiated functions- HsClassDecl s c n ns ds decls ->- fmap (HsClassDecl s c n ns ds) $ mapM transformDecl decls- -- Type signatures, type, newtype or data declarations, infix declarations- -- and default declarations; none can contain regular patterns- _ -> return d- ---- | Transform a function "match" by generating pattern guards and--- declarations representing regular patterns in the argument list.--- Subterms, such as guards and the right-hand side, are also traversed--- transformed.-transformMatch :: HsMatch -> HsxM HsMatch-transformMatch (HsMatch srcloc name pats rhs decls) = do- -- Preserve semantics of irrefutable regular patterns by postponing- -- their evaluation to a let-expression on the right-hand side- let (pats', rnpss) = unzip $ renameIrrPats pats- -- Transform the patterns that stand as arguments to the function- (pats'', attrGuards, guards, decls'') <- transformPatterns pats'- -- Transform the right-hand side, and add any generated guards- -- and let expressions to it- rhs' <- mkRhs srcloc (attrGuards ++ guards) (concat rnpss) rhs- -- Transform declarations in the where clause, adding any generated- -- declarations to it- decls' <- case decls of- HsBDecls ds -> do ds' <- transformLetDecls ds- return $ HsBDecls $ decls'' ++ ds'- _ -> error "Cannot bind implicit parameters in the \- \ \'where\' clause of a function using regular patterns."-- return $ HsMatch srcloc name pats'' rhs' decls'--- | Transform and update guards and right-hand side of a function or--- pattern binding. The supplied list of guards is prepended to the --- original guards, and subterms are traversed and transformed.-mkRhs :: SrcLoc -> [Guard] -> [(HsName, HsPat)] -> HsRhs -> HsxM HsRhs-mkRhs srcloc guards rnps (HsUnGuardedRhs rhs) = do- -- Add the postponed patterns to the right-hand side by placing- -- them in a let-expression to make them lazily evaluated.- -- Then transform the whole right-hand side as an expression.- rhs' <- transformExp $ addLetDecls srcloc rnps rhs- case guards of - -- There were no guards before, and none should be added,- -- so we still have an unguarded right-hand side- [] -> return $ HsUnGuardedRhs rhs'- -- There are guards to add. These should be added as pattern- -- guards, i.e. as statements.- _ -> return $ HsGuardedRhss [HsGuardedRhs srcloc (map mkStmtGuard guards) rhs']-mkRhs _ guards rnps (HsGuardedRhss gdrhss) = fmap HsGuardedRhss $ mapM (mkGRhs guards rnps) gdrhss- where mkGRhs :: [Guard] -> [(HsName, HsPat)] -> HsGuardedRhs -> HsxM HsGuardedRhs- mkGRhs gs rnps (HsGuardedRhs s oldgs rhs) = do- -- Add the postponed patterns to the right-hand side by placing- -- them in a let-expression to make them lazily evaluated.- -- Then transform the whole right-hand side as an expression.- rhs' <- transformExp $ addLetDecls s rnps rhs- -- Now there are guards, so first we need to transform those- oldgs' <- fmap concat $ mapM (transformStmt Guard) oldgs- -- ... and then prepend the newly generated ones, as statements- return $ HsGuardedRhs s ((map mkStmtGuard gs) ++ oldgs') rhs'---- | Place declarations of postponed regular patterns in a let-expression to--- make them lazy, in order to make them behave as irrefutable patterns.-addLetDecls :: SrcLoc -> [(HsName, HsPat)] -> HsExp -> HsExp-addLetDecls s [] e = e -- no declarations to add-addLetDecls s rnps e = - -- Place all postponed patterns in the same let-expression- letE (map (mkDecl s) rnps) e---- | Make pattern binds from postponed regular patterns-mkDecl :: SrcLoc -> (HsName, HsPat) -> HsDecl-mkDecl srcloc (n,p) = patBind srcloc p (var n)----------------------------------------------------------------------------------------- Expressions- --- | Transform expressions by traversing subterms.--- Of special interest are expressions that contain patterns as subterms,--- i.e. @let@, @case@ and lambda expressions, and also list comprehensions--- and @do@-expressions. All other expressions simply transform their--- sub-expressions, if any.--- Of special interest are of course also any xml expressions.-transformExp :: HsExp -> HsxM HsExp-transformExp e = case e of- -- A standard xml tag should be transformed into an element of the- -- XML datatype. Attributes should be made into a set of mappings, - -- and children should be transformed.- HsXTag _ name attrs mattr cs -> do- -- Hey Pluto, look, we have XML in our syntax tree!- setXmlTransformed- let -- ... make tuples of the attributes- as = map mkAttr attrs- -- ... transform the children- cs' <- mapM transformChild cs- -- ... and lift the values into the XML datatype.- return $ paren $ metaMkTag name as mattr cs'-- where -- | Transform expressions appearing in child position of an xml tag.- -- Expressions are first transformed, then wrapped in a call to- -- @toXml@.- transformChild :: HsExp -> HsxM HsExp- transformChild e = do- -- Transform the expression- te <- transformExp e- -- ... and apply the overloaded toXMLs to it- return $ metaToXmls te- - -- An empty xml tag should be transformed just as a standard tag,- -- only that there are no children,- HsXETag _ name attrs mattr -> do- -- ... 'tis the season to be jolly, falalalalaaaa....- setXmlTransformed- let -- ... make tuples of the attributes - as = map mkAttr attrs- -- ... and lift the values into the XML datatype.- return $ paren $ metaMkETag name as mattr- -- PCDATA should be lifted as a string into the XML datatype.- HsXPcdata pcdata -> do setXmlTransformed- return $ metaMkPcdata pcdata- -- Escaped expressions should be treated as just expressions.- HsXExpTag e -> do setXmlTransformed- transformExp e- - -- Patterns as arguments to a lambda expression could be regular,- -- but we cannot put the evaluation here since a lambda expression- -- can have neither guards nor a where clause. Thus we must postpone - -- them to a case expressions on the right-hand side.- HsLambda s pats rhs -> do- let -- First rename regular patterns- (ps, rnpss) = unzip $ renameRPats pats- -- ... group them up to one big tuple- (rns, rps) = unzip (concat rnpss)- alt1 = alt s (pTuple rps) rhs- texp = varTuple rns- -- ... and put it all in a case expression, which- -- can then be transformed in the normal way.- e = if null rns then rhs else caseE texp [alt1]- rhs' <- transformExp e- return $ HsLambda s ps rhs'- -- A let expression can contain regular patterns in the declarations, - -- or in the expression that makes up the body of the let.- HsLet (HsBDecls ds) e -> do- -- Declarations appearing in a let expression must be transformed- -- in a special way due to scoping, see later documentation.- -- The body is transformed as a normal expression.- ds' <- transformLetDecls ds- e' <- transformExp e- return $ letE ds' e'- -- Bindings of implicit parameters can appear either in ordinary let- -- expressions (GHC), in dlet expressions (Hugs) or in a with clause- -- (both). Such bindings are transformed in a special way. The body - -- is transformed as a normal expression in all cases.- HsLet (HsIPBinds is) e -> do- is' <- mapM transformIPBind is- e' <- transformExp e- return $ HsLet (HsIPBinds is') e'- HsDLet ipbs e -> do- ipbs' <- mapM transformIPBind ipbs- e' <- transformExp e- return $ HsDLet ipbs' e'- HsWith e ipbs -> do- ipbs' <- mapM transformIPBind ipbs- e' <- transformExp e- return $ HsWith e' ipbs'- -- A case expression can contain regular patterns in the expression- -- that is the subject of the casing, or in either of the alternatives.- HsCase e alts -> do- e' <- transformExp e- alts' <- mapM transformAlt alts- return $ HsCase e' alts'- -- A do expression can contain regular patterns in its statements.- HsDo stmts -> do- stmts' <- fmap concat $ mapM (transformStmt Do) stmts- return $ HsDo stmts'- HsMDo stmts -> do- stmts' <- fmap concat $ mapM (transformStmt Do) stmts- return $ HsMDo stmts'- -- A list comprehension can contain regular patterns in the result - -- expression, or in any of its statements.- HsListComp e stmts -> do- e' <- transformExp e- stmts' <- fmap concat $ mapM (transformStmt ListComp) stmts- return $ HsListComp e' stmts'- -- All other expressions simply transform their immediate subterms.- HsInfixApp e1 op e2 -> transform2exp e1 e2 - (\e1 e2 -> HsInfixApp e1 op e2)- HsApp e1 e2 -> transform2exp e1 e2 HsApp- HsNegApp e -> fmap HsNegApp $ transformExp e- HsIf e1 e2 e3 -> transform3exp e1 e2 e3 HsIf- HsTuple es -> fmap HsTuple $ mapM transformExp es- HsList es -> fmap HsList $ mapM transformExp es- HsParen e -> fmap HsParen $ transformExp e- HsLeftSection e op -> do e' <- transformExp e- return $ HsLeftSection e' op- HsRightSection op e -> fmap (HsRightSection op) $ transformExp e- HsRecConstr n fus -> fmap (HsRecConstr n) $ mapM transformFieldUpdate fus- HsRecUpdate e fus -> do e' <- transformExp e- fus' <- mapM transformFieldUpdate fus- return $ HsRecUpdate e' fus'- HsEnumFrom e -> fmap HsEnumFrom $ transformExp e- HsEnumFromTo e1 e2 -> transform2exp e1 e2 HsEnumFromTo- HsEnumFromThen e1 e2 -> transform2exp e1 e2 HsEnumFromThen- HsEnumFromThenTo e1 e2 e3 -> transform3exp e1 e2 e3 HsEnumFromThenTo- HsExpTypeSig s e t -> do e' <- transformExp e- return $ HsExpTypeSig s e' t- _ -> return e -- Warning! Does not work with TH bracketed expressions ([| ... |])-- where transformFieldUpdate :: HsFieldUpdate -> HsxM HsFieldUpdate- transformFieldUpdate (HsFieldUpdate n e) =- fmap (HsFieldUpdate n) $ transformExp e- - transform2exp :: HsExp -> HsExp -> (HsExp -> HsExp -> HsExp) -> HsxM HsExp- transform2exp e1 e2 f = do e1' <- transformExp e1- e2' <- transformExp e2- return $ f e1' e2'- - transform3exp :: HsExp -> HsExp -> HsExp -> (HsExp -> HsExp -> HsExp -> HsExp) -> HsxM HsExp- transform3exp e1 e2 e3 f = do e1' <- transformExp e1- e2' <- transformExp e2- e3' <- transformExp e3- return $ f e1' e2' e3'-- mkAttr :: HsXAttr -> HsExp- mkAttr (HsXAttr name e) = - paren (metaMkName name `metaAssign` e)----- | Transform pattern bind declarations inside a @let@-expression by transforming --- subterms that could appear as regular patterns, as well as transforming the bound--- pattern itself. The reason we need to do this in a special way is scoping, i.e.--- in the expression @let a | Just b <- match a = list in b@ the variable b will not--- be in scope after the @in@. And besides, we would be on thin ice even if it was in--- scope since we are referring to the pattern being bound in the guard that will--- decide if the pattern will be bound... yikes, why does Haskell allow guards on --- pattern binds to refer to the patterns being bound, could that ever lead to anything--- but an infinite loop??-transformLetDecls :: [HsDecl] -> HsxM [HsDecl]-transformLetDecls ds = do- -- We need to rename regular patterns in pattern bindings, since we need to- -- separate the generated declaration sets. This since we need to add them not- -- to the actual binding but rather to the declaration that will be the guard- -- of the binding.- let ds' = renameLetDecls ds - transformLDs 0 0 ds'- where transformLDs :: Int -> Int -> [HsDecl] -> HsxM [HsDecl]- transformLDs k l ds = case ds of- [] -> return []- (d:ds) -> case d of- HsPatBind srcloc pat rhs decls -> do- -- We need to transform all pattern bindings in a set of- -- declarations in the same context w.r.t. generating fresh- -- variable names, since they will all be in scope at the same time.- ([pat'], ags, gs, ws, k', l') <- runTrFromTo k l (trPatterns [pat])- decls' <- case decls of- -- Any declarations already in place should be left where they- -- are since they probably refer to the generating right-hand- -- side of the pattern bind. If they don't, we're in trouble...- HsBDecls decls -> fmap HsBDecls $ transformLetDecls decls- -- If they are implicit parameter bindings we simply transform- -- them as such.- HsIPBinds decls -> fmap HsIPBinds $ mapM transformIPBind decls- -- The generated guard, if any, should be a declaration, and the- -- generated declarations should be associated with it.- let gs' = case gs of- [] -> []- [g] -> [mkDeclGuard g ws]- _ -> error "This should not happen since we \ - \ have called renameLetDecls already!"- -- Generated attribute guards should also be added as declarations,- -- but with no where clauses.- ags' = map (flip mkDeclGuard $ []) ags- -- We must transform the right-hand side as well, but there are- -- no new guards, nor any postponed patterns, to supply at this time.- rhs' <- mkRhs srcloc [] [] rhs- -- ... and then we should recurse with the new gensym argument.- ds' <- transformLDs k' l' ds- -- The generated guards, which should be at most one, should be- -- added as declarations rather than as guards due to the- -- scoping issue described above.- return $ (HsPatBind srcloc pat' rhs' decls') : ags' ++ gs' ++ ds'-- -- We only need to treat pattern binds separately, other declarations- -- can be transformed normally.- d -> do d' <- transformDecl d - ds' <- transformLDs k l ds- return $ d':ds'----- | Transform binding of implicit parameters by transforming the expression on the --- right-hand side. The left-hand side can only be an implicit parameter, so no--- regular patterns there...-transformIPBind :: HsIPBind -> HsxM HsIPBind-transformIPBind (HsIPBind s n e) =- fmap (HsIPBind s n) $ transformExp e----------------------------------------------------------------------------------------- Statements of various kinds---- | A simple annotation datatype for statement contexts.-data StmtType = Do | Guard | ListComp---- | Transform statements by traversing and transforming subterms.--- Since generator statements have slightly different semantics --- depending on their context, statements are annotated with their--- context to ensure that the semantics of the resulting statement--- sequence is correct. The return type is a list since generated--- guards will be added as statements on the same level as the--- statement to be transformed.-transformStmt :: StmtType -> HsStmt -> HsxM [HsStmt]-transformStmt t s = case s of- -- Generators can have regular patterns in the result pattern on the- -- left-hand side and in the generating expression.- HsGenerator s p e -> do- let -- We need to treat generated guards differently depending- -- on the context of the statement.- guardFun = case t of- Do -> monadify- ListComp -> monadify- Guard -> mkStmtGuard- -- Preserve semantics of irrefutable regular patterns by postponing- -- their evaluation to a let-expression on the right-hand side- ([p'], rnpss) = unzip $ renameIrrPats [p]- -- Transform the pattern itself- ([p''], ags, gs, ds) <- transformPatterns [p']- -- Put the generated declarations in a let-statement- let lt = case ds of- [] -> []- _ -> [letStmt ds]- -- Perform the designated trick on the generated guards.- gs' = map guardFun (ags ++ gs)- -- Add the postponed patterns to the right-hand side by placing- -- them in a let-expression to make them lazily evaluated.- -- Then transform the whole right-hand side as an expression.- e' <- transformExp $ addLetDecls s (concat rnpss) e- return $ HsGenerator s p'' e':lt ++ gs'- where monadify :: Guard -> HsStmt- -- To monadify is to create a statement guard, only that the- -- generation must take place in a monad, so we need to "return"- -- the value gotten from the guard.- monadify (s,p,e) = genStmt s p (metaReturn $ paren e)- -- Qualifiers are simply wrapped expressions and are treated as such.- HsQualifier e -> fmap (\e -> [HsQualifier $ e]) $ transformExp e- -- Let statements suffer from the same problem as let expressions, so- -- the declarations should be treated in the same special way.- HsLetStmt (HsBDecls ds) -> - fmap (\ds -> [letStmt ds]) $ transformLetDecls ds- -- If the bindings are of implicit parameters we simply transform them as such.- HsLetStmt (HsIPBinds is) -> - fmap (\is -> [HsLetStmt (HsIPBinds is)]) $ mapM transformIPBind is------------------------------------------------------------------------------------------------ Case alternatives---- | Transform alternatives in a @case@-expression. Patterns are--- transformed, while other subterms are traversed further.-transformAlt :: HsAlt -> HsxM HsAlt-transformAlt (HsAlt srcloc pat rhs decls) = do- -- Preserve semantics of irrefutable regular patterns by postponing- -- their evaluation to a let-expression on the right-hand side- let ([pat'], rnpss) = unzip $ renameIrrPats [pat]- -- Transform the pattern itself- ([pat''], attrGuards, guards, decls'') <- transformPatterns [pat']- -- Transform the right-hand side, and add any generated guards- -- and let expressions to it.- rhs' <- mkGAlts srcloc (attrGuards ++ guards) (concat rnpss) rhs- -- Transform declarations in the where clause, adding any generated- -- declarations to it.- decls' <- case decls of- HsBDecls ds -> do ds' <- mapM transformDecl ds- return $ HsBDecls $ decls'' ++ ds- _ -> error "Cannot bind implicit parameters in the \- \ \'where\' clause of a function using regular patterns."-- return $ HsAlt srcloc pat'' rhs' decls'- - -- Transform and update guards and right-hand side of a case-expression.- -- The supplied list of guards is prepended to the original guards, and - -- subterms are traversed and transformed.- where mkGAlts :: SrcLoc -> [Guard] -> [(HsName, HsPat)] -> HsGuardedAlts -> HsxM HsGuardedAlts- mkGAlts s guards rnps (HsUnGuardedAlt rhs) = do- -- Add the postponed patterns to the right-hand side by placing- -- them in a let-expression to make them lazily evaluated.- -- Then transform the whole right-hand side as an expression.- rhs' <- transformExp $ addLetDecls s rnps rhs- case guards of- -- There were no guards before, and none should be added,- -- so we still have an unguarded right-hand side- [] -> return $ HsUnGuardedAlt rhs'- -- There are guards to add. These should be added as pattern- -- guards, i.e. as statements.- _ -> return $ HsGuardedAlts [HsGuardedAlt s (map mkStmtGuard guards) rhs']- mkGAlts s gs rnps (HsGuardedAlts galts) =- fmap HsGuardedAlts $ mapM (mkGAlt gs rnps) galts- where mkGAlt :: [Guard] -> [(HsName, HsPat)] -> HsGuardedAlt -> HsxM HsGuardedAlt- mkGAlt gs rnps (HsGuardedAlt s oldgs rhs) = do- -- Add the postponed patterns to the right-hand side by placing- -- them in a let-expression to make them lazily evaluated.- -- Then transform the whole right-hand side as an expression.- do rhs' <- transformExp $ addLetDecls s rnps rhs- -- Now there are guards, so first we need to transform those- oldgs' <- fmap concat $ mapM (transformStmt Guard) oldgs- -- ... and then prepend the newly generated ones, as statements- return $ HsGuardedAlt s ((map mkStmtGuard gs) ++ oldgs') rhs'--------------------------------------------------------------------------------------- Guards---- In some places, a guard will be a declaration instead of the--- normal statement, so we represent it in a generic fashion.-type Guard = (SrcLoc, HsPat, HsExp)--mkStmtGuard :: Guard -> HsStmt-mkStmtGuard (s, p, e) = genStmt s p e--mkDeclGuard :: Guard -> [HsDecl] -> HsDecl-mkDeclGuard (s, p, e) ds = patBindWhere s p e ds--------------------------------------------------------------------------------------- Rewriting expressions before transformation.--- Done in a monad for gensym capability.--newtype RN a = RN (RNState -> (a, RNState))--type RNState = Int--initRNState = 0--instance Monad RN where- return a = RN $ \s -> (a,s)- (RN f) >>= k = RN $ \s -> let (a,s') = f s- (RN g) = k a- in g s'--instance Functor RN where- fmap f rna = do a <- rna- return $ f a---runRename :: RN a -> a-runRename (RN f) = let (a,_) = f initRNState- in a--getRNState :: RN RNState-getRNState = RN $ \s -> (s,s)--setRNState :: RNState -> RN ()-setRNState s = RN $ \_ -> ((), s)--genVarName :: RN HsName-genVarName = do - k <- getRNState- setRNState $ k+1- return $ name $ "harp_rnvar" ++ show k---type NameBind = (HsName, HsPat)---- Some generic functions on monads for traversing subterms--rename1pat :: a -> (b -> c) -> (a -> RN (b, [d])) -> RN (c, [d])-rename1pat p f rn = do (q, ms) <- rn p- return (f q, ms)--rename2pat :: a -> a -> (b -> b -> c) -> (a -> RN (b, [d])) -> RN (c, [d])-rename2pat p1 p2 f rn = do (q1, ms1) <- rn p1- (q2, ms2) <- rn p2- return $ (f q1 q2, ms1 ++ ms2)- -renameNpat :: [a] -> ([b] -> c) -> (a -> RN (b, [d])) -> RN (c, [d])-renameNpat ps f rn = do (qs, mss) <- fmap unzip $ mapM rn ps- return (f qs, concat mss)------- | Generate variables as placeholders for any regular patterns, in order--- to place their evaluation elsewhere. We must likewise move the evaluation--- of Tags because attribute lookups are force evaluation.-renameRPats :: [HsPat] -> [(HsPat, [NameBind])]-renameRPats ps = runRename $ mapM renameRP ps--renameRP :: HsPat -> RN (HsPat, [NameBind])-renameRP p = case p of- -- We must rename regular patterns and Tag expressions- HsPRPat _ _ -> rename p- HsPXTag _ _ _ _ _ -> rename p- HsPXETag _ _ _ _ -> rename p- -- The rest of the rules simply try to rename regular patterns in- -- their immediate subpatterns.- HsPNeg p -> rename1pat p HsPNeg renameRP- HsPInfixApp p1 n p2 -> rename2pat p1 p2- (\p1 p2 -> HsPInfixApp p1 n p2)- renameRP- HsPApp n ps -> renameNpat ps (HsPApp n) renameRP- HsPTuple ps -> renameNpat ps HsPTuple renameRP- HsPList ps -> renameNpat ps HsPList renameRP- HsPParen p -> rename1pat p HsPParen renameRP- HsPRec n pfs -> renameNpat pfs (HsPRec n) renameRPf- HsPAsPat n p -> rename1pat p (HsPAsPat n) renameRP- HsPIrrPat p -> rename1pat p HsPIrrPat renameRP- HsPXPatTag p -> rename1pat p HsPXPatTag renameRP- HsPatTypeSig s p t -> rename1pat p (\p -> HsPatTypeSig s p t) renameRP - _ -> return (p, [])-- where renameRPf :: HsPatField -> RN (HsPatField, [NameBind])- renameRPf (HsPFieldPat n p) = rename1pat p (HsPFieldPat n) renameRP- - renameAttr :: HsPXAttr -> RN (HsPXAttr, [NameBind])- renameAttr (HsPXAttr s p) = rename1pat p (HsPXAttr s) renameRP- - rename :: HsPat -> RN (HsPat, [NameBind])- rename p = do -- Generate a fresh variable- n <- genVarName- -- ... and return that, along with the association of- -- the variable with the old pattern- return (pvar n, [(n,p)])---- | Rename declarations appearing in @let@s or @where@ clauses.-renameLetDecls :: [HsDecl] -> [HsDecl]-renameLetDecls ds = - let -- Rename all regular patterns bound in pattern bindings.- (ds', smss) = unzip $ runRename $ mapM renameLetDecl ds- -- ... and then generate declarations for the associations- gs = map (\(s,n,p) -> mkDecl s (n,p)) (concat smss)- -- ... which should be added to the original list of declarations.- in ds' ++ gs-- where renameLetDecl :: HsDecl -> RN (HsDecl, [(SrcLoc, HsName, HsPat)])- renameLetDecl d = case d of- -- We need only bother about pattern bindings.- HsPatBind srcloc pat rhs decls -> do- -- Rename any regular patterns that appear in the- -- pattern being bound.- (p, ms) <- renameRP pat- let sms = map (\(n,p) -> (srcloc, n, p)) ms- return $ (HsPatBind srcloc p rhs decls, sms)- _ -> return (d, [])----- | Move irrefutable regular patterns into a @let@-expression instead,--- to make sure that the semantics of @~@ are preserved.-renameIrrPats :: [HsPat] -> [(HsPat, [NameBind])]-renameIrrPats ps = runRename (mapM renameIrrP ps)--renameIrrP :: HsPat -> RN (HsPat, [(HsName, HsPat)])-renameIrrP p = case p of- -- We should rename any regular pattern appearing- -- inside an irrefutable pattern.- HsPIrrPat p -> do (q, ms) <- renameRP p- return $ (HsPIrrPat q, ms)- -- The rest of the rules simply try to rename regular patterns in- -- irrefutable patterns in their immediate subpatterns.- HsPNeg p -> rename1pat p HsPNeg renameIrrP- HsPInfixApp p1 n p2 -> rename2pat p1 p2- (\p1 p2 -> HsPInfixApp p1 n p2)- renameIrrP- HsPApp n ps -> renameNpat ps (HsPApp n) renameIrrP- HsPTuple ps -> renameNpat ps HsPTuple renameIrrP- HsPList ps -> renameNpat ps HsPList renameIrrP- HsPParen p -> rename1pat p HsPParen renameIrrP- HsPRec n pfs -> renameNpat pfs (HsPRec n) renameIrrPf- HsPAsPat n p -> rename1pat p (HsPAsPat n) renameIrrP- HsPatTypeSig s p t -> rename1pat p (\p -> HsPatTypeSig s p t) renameIrrP -- -- Hsx- HsPXTag s n attrs mat p -> do (attrs', nss) <- fmap unzip $ mapM renameIrrAttr attrs- (mat', ns1) <- case mat of- Nothing -> return (Nothing, [])- Just at -> do (at', ns) <- renameIrrP at- return (Just at', ns)- (q, ns) <- rename1pat p (HsPXTag s n attrs' mat') renameIrrP- return (q, concat nss ++ ns1 ++ ns)- HsPXETag s n attrs mat -> do (as, nss) <- fmap unzip $ mapM renameIrrAttr attrs- (mat', ns1) <- case mat of- Nothing -> return (Nothing, [])- Just at -> do (at', ns) <- renameIrrP at- return (Just at', ns)- return $ (HsPXETag s n as mat', concat nss ++ ns1)- HsPXPatTag p -> rename1pat p HsPXPatTag renameIrrP- -- End Hsx-- _ -> return (p, [])- - where renameIrrPf :: HsPatField -> RN (HsPatField, [NameBind])- renameIrrPf (HsPFieldPat n p) = rename1pat p (HsPFieldPat n) renameIrrP- - renameIrrAttr :: HsPXAttr -> RN (HsPXAttr, [NameBind])- renameIrrAttr (HsPXAttr s p) = rename1pat p (HsPXAttr s) renameIrrP--------------------------------------------------------------------------------------- Transforming Patterns: the real stuff---- | Transform several patterns in the same context, thereby--- generating any code for matching regular patterns.-transformPatterns :: [HsPat] -> HsxM ([HsPat], [Guard], [Guard], [HsDecl])-transformPatterns ps = runTr (trPatterns ps)-------------------------------------------------------- The transformation monad--type State = (Int, Int, Int, [Guard], [Guard], [HsDecl])--newtype Tr a = Tr (State -> HsxM (a, State))--instance Monad Tr where- return a = Tr $ \s -> return (a, s)- (Tr f) >>= k = Tr $ \s ->- do (a, s') <- f s- let (Tr f') = k a- f' s'--instance Functor Tr where- fmap f tra = tra >>= (return . f)--liftTr :: HsxM a -> Tr a-liftTr hma = Tr $ \s -> do a <- hma- return (a, s)--initState = initStateFrom 0 0--initStateFrom k l = (0, k, l, [], [], [])--runTr :: Tr a -> HsxM (a, [Guard], [Guard], [HsDecl])-runTr (Tr f) = do (a, (_,_,_,gs1,gs2,ds)) <- f initState- return (a, reverse gs1, reverse gs2, reverse ds)---runTrFromTo :: Int -> Int -> Tr a -> HsxM (a, [Guard], [Guard], [HsDecl], Int, Int)-runTrFromTo k l (Tr f) = do (a, (_,k',l',gs1,gs2,ds)) <- f $ initStateFrom k l- return (a, reverse gs1, reverse gs2, reverse ds, k', l')----- manipulating the state-getState :: Tr State-getState = Tr $ \s -> return (s,s)--setState :: State -> Tr ()-setState s = Tr $ \_ -> return ((),s)--updateState :: (State -> (a,State)) -> Tr a-updateState f = do s <- getState- let (a,s') = f s- setState s'- return a---- specific state manipulating functions-pushGuard :: SrcLoc -> HsPat -> HsExp -> Tr ()-pushGuard s p e = updateState $ \(n,m,a,gs1,gs2,ds) -> ((),(n,m,a,gs1,(s,p,e):gs2,ds))- -pushDecl :: HsDecl -> Tr ()-pushDecl d = updateState $ \(n,m,a,gs1,gs2,ds) -> ((),(n,m,a,gs1,gs2,d:ds))--pushAttrGuard :: SrcLoc -> HsPat -> HsExp -> Tr ()-pushAttrGuard s p e = updateState $ \(n,m,a,gs1,gs2,ds) -> ((),(n,m,a,(s,p,e):gs1,gs2,ds))--genMatchName :: Tr HsName-genMatchName = do k <- updateState $ \(n,m,a,gs1,gs2,ds) -> (n,(n+1,m,a,gs1,gs2,ds))- return $ HsIdent $ "harp_match" ++ show k--genPatName :: Tr HsName-genPatName = do k <- updateState $ \(n,m,a,gs1,gs2,ds) -> (m,(n,m+1,a,gs1,gs2,ds))- return $ HsIdent $ "harp_pat" ++ show k--genAttrName :: Tr HsName-genAttrName = do k <- updateState $ \(n,m,a,gs1,gs2,ds) -> (m,(n,m,a+1,gs1,gs2,ds))- return $ HsIdent $ "hsx_attrs" ++ show k---setHarpTransformedT, setXmlTransformedT :: Tr ()-setHarpTransformedT = liftTr setHarpTransformed-setXmlTransformedT = liftTr setXmlTransformed------------------------------------------------------------------------- Some generic functions for computations in the Tr monad. Could--- be made even more general, but there's really no point right now...--tr1pat :: a -> (b -> c) -> (a -> Tr b) -> Tr c-tr1pat p f tr = do q <- tr p- return $ f q--tr2pat :: a -> a -> (b -> b -> c) -> (a -> Tr b) -> Tr c-tr2pat p1 p2 f tr = do q1 <- tr p1- q2 <- tr p2- return $ f q1 q2--trNpat :: [a] -> ([b] -> c) -> (a -> Tr b) -> Tr c-trNpat ps f tr = do qs <- mapM tr ps- return $ f qs---------------------------------------------------------------------------------- The *real* transformations--- Transforming patterns---- | Transform several patterns in the same context-trPatterns :: [HsPat] -> Tr [HsPat]-trPatterns = mapM trPattern---- | Transform a pattern by traversing the syntax tree.--- A regular pattern is translated, other patterns are --- simply left as is.-trPattern :: HsPat -> Tr HsPat-trPattern p = case p of- -- This is where the fun starts. =)- -- Regular patterns must be transformed of course.- HsPRPat s rps -> do- -- First we need a name for the placeholder pattern.- n <- genPatName - -- A top-level regular pattern is a sequence in linear- -- context, so we can simply translate it as if it was one.- (mname, vars, _) <- trRPat s True (HsRPSeq rps)- -- Generate a top level declaration.- topmname <- mkTopDecl s mname vars- -- Generate a pattern guard for this regular pattern,- -- that will match the generated declaration to the - -- value of the placeholder, and bind all variables.- mkGuard s vars topmname n- -- And indeed, we have made a transformation!- setHarpTransformedT- -- Return the placeholder pattern.- return $ pvar n- -- Tag patterns should be transformed- HsPXTag s name attrs mattr cpat -> do- -- We need a name for the attribute list, if there are lookups- an <- case (mattr, attrs) of- -- ... if there is one already, and there are no lookups- -- we can just return that- (Just ap, []) -> return $ ap- -- ... if there are none, we dont' care- (_, []) -> return wildcard- (_, _) -> do -- ... but if there are, we want a name for that list- n <- genAttrName- -- ... we must turn attribute lookups into guards- mkAttrGuards s n attrs mattr- -- ... and we return the pattern- return $ pvar n- -- ... the pattern representing children should be transformed- cpat' <- trPattern cpat- -- ... we have made a transformation and should report that- setHarpTransformedT- -- ... and we return a Tag pattern.- let (dom, n) = xNameParts name- return $ metaTag dom n an cpat' - -- ... as should empty Tag patterns- HsPXETag s name attrs mattr -> do- -- We need a name for the attribute list, if there are lookups- an <- case (mattr, attrs) of- -- ... if there is a pattern already, and there are no lookups- -- we can just return that- (Just ap, []) -> return $ ap- -- ... if there are none, we dont' care- (_, []) -> return wildcard- (_, _) -> do -- ... but if there are, we want a name for that list- n <- genAttrName- -- ... we must turn attribute lookups into guards- mkAttrGuards s n attrs mattr- -- ... and we return the pattern- return $ pvar n- -- ... we have made a transformation and should report that- setHarpTransformedT- -- ... and we return an ETag pattern.- let (dom, n) = xNameParts name- return $ metaTag dom n an peList- -- PCDATA patterns are strings in the xml datatype.- HsPXPcdata s -> setHarpTransformedT >> (return $ metaPcdata s)- -- XML comments are likewise just treated as strings.- HsPXPatTag p -> setHarpTransformedT >> trPattern p-- -- Transforming any other patterns simply means transforming- -- their subparts.- HsPVar _ -> return p- HsPLit _ -> return p- HsPNeg q -> tr1pat q HsPNeg trPattern- HsPInfixApp p1 op p2 -> tr2pat p1 p2 (\p1 p2 -> HsPInfixApp p1 op p2) trPattern- HsPApp n ps -> trNpat ps (HsPApp n) trPattern- HsPTuple ps -> trNpat ps HsPTuple trPattern- HsPList ps -> trNpat ps HsPList trPattern- HsPParen p -> tr1pat p HsPParen trPattern- HsPRec n pfs -> trNpat pfs (HsPRec n) trPatternField- HsPAsPat n p -> tr1pat p (HsPAsPat n) trPattern- HsPWildCard -> return p- HsPIrrPat p -> tr1pat p HsPIrrPat trPattern- HsPatTypeSig s p t -> tr1pat p (\p -> HsPatTypeSig s p t) trPattern-- where -- Transform a pattern field.- trPatternField :: HsPatField -> Tr HsPatField- trPatternField (HsPFieldPat n p) = - tr1pat p (HsPFieldPat n) trPattern- - -- Deconstruct an xml tag name into its parts.- xNameParts :: HsXName -> (Maybe String, String)- xNameParts n = case n of- HsXName s -> (Nothing, s)- HsXDomName d s -> (Just d, s)-- -- | Generate a guard for looking up xml attributes.- mkAttrGuards :: SrcLoc -> HsName -> [HsPXAttr] -> Maybe HsPat -> Tr ()- mkAttrGuards s attrs [HsPXAttr n q] mattr = do- -- Apply lookupAttr to the attribute name and- -- attribute set- let rhs = metaExtract n attrs- -- ... catch the result- pat = metaPJust q- -- ... catch the remainder list- rml = case mattr of- Nothing -> wildcard- Just ap -> ap- -- ... and add the generated guard to the store.- pushAttrGuard s (pTuple [pat, rml]) rhs-- mkAttrGuards s attrs ((HsPXAttr a q):xs) mattr = do- -- Apply lookupAttr to the attribute name and- -- attribute set- let rhs = metaExtract a attrs- -- ... catch the result- pat = metaPJust q- -- ... catch the remainder list- newAttrs <- genAttrName- -- ... and add the generated guard to the store.- pushAttrGuard s (pTuple [pat, pvar newAttrs]) rhs- -- ... and finally recurse- mkAttrGuards s newAttrs xs mattr- - -- | Generate a declaration at top level that will finalise all - -- variable continuations, and then return all bound variables.- mkTopDecl :: SrcLoc -> HsName -> [HsName] -> Tr HsName- mkTopDecl s mname vars = - do -- Give the match function a name- n <- genMatchName - -- Create the declaration and add it to the store.- pushDecl $ topDecl s n mname vars- -- Return the name of the match function so that the- -- guard that will be generated can call it.- return n-- topDecl :: SrcLoc -> HsName -> HsName -> [HsName] -> HsDecl- topDecl s n mname vs = - let pat = pTuple [wildcard, pvarTuple vs] -- (_, (foo, bar, ...))- g = var mname -- harp_matchX- a = genStmt s pat g -- (_, (foo, ...)) <- harp_matchX- vars = map (\v -> app (var v) eList) vs -- (foo [], bar [], ...)- b = qualStmt $ metaReturn $ tuple vars -- return (foo [], bar [], ...)- e = doE [a,b] -- do (...) <- harp_matchX- -- return (foo [], bar [], ...)- in nameBind s n e -- harp_matchY = do ....-- -- | Generate a pattern guard that will apply the @runMatch@- -- function on the top-level match function and the input list,- -- thereby binding all variables.- mkGuard :: SrcLoc -> [HsName] -> HsName -> HsName -> Tr ()- mkGuard s vars mname n = do- let tvs = pvarTuple vars -- (foo, bar, ...)- ge = appFun runMatchFun [var mname, var n] -- runMatch harp_matchX harp_patY- pushGuard s (pApp just_name [tvs]) ge -- Just (foo, bar, ...) , runMatch ...-------------------------------------------------------------------------------------- Transforming regular patterns---- | A simple datatype to annotate return values from sub-patterns-data MType = S -- Single element- | L MType -- List of ... , (/ /), *, +- | E MType MType -- Either ... or ... , ( | )- | M MType -- Maybe ... , ?----- When transforming a regular sub-pattern, we need to know the--- name of the function generated to match it, the names of all--- variables it binds, and the type of its returned value.-type MFunMetaInfo = (HsName, [HsName], MType)----- | Transform away a regular pattern, generating code--- to replace it.-trRPat :: SrcLoc -> Bool -> HsRPat -> Tr MFunMetaInfo-trRPat s linear rp = case rp of- -- For an ordinary Haskell pattern we need to generate a- -- base match function for the pattern, and a declaration- -- that lifts that function into the matcher monad.- HsRPPat p -> do mkBaseDecl s linear p- - where -- | Generate declarations for matching ordinary Haskell patterns- mkBaseDecl :: SrcLoc -> Bool -> HsPat -> Tr MFunMetaInfo- mkBaseDecl s linear p = case p of- -- We can simplify a lot if the pattern is a wildcard or a variable- HsPWildCard -> mkWCMatch s- HsPVar v -> mkVarMatch s linear v- -- ... and if it is an embedded pattern tag, we can just skip it- HsPXPatTag q -> mkBaseDecl s linear q-- -- ... otherwise we'll have to take the long way...- p -> do -- First do a case match on a single element- (name, vars, _) <- mkBasePat s linear p - -- ... apply baseMatch to the case matcher to - -- lift it into the matcher monad.- newname <- mkBaseMatch s name - -- ... and return the meta-info gathered.- return (newname, vars, S)-- -- | Generate a declaration for matching a variable.- mkVarMatch :: SrcLoc -> Bool -> HsName -> Tr MFunMetaInfo- mkVarMatch s linear v = do- -- First we need a name for the new match function.- n <- genMatchName- -- Then we need a basic matching function that always matches,- -- and that binds the value matched to the variable in question.- let e = paren $ lamE s [pvar v] $ -- (\v -> Just (mf v))- app (var just_name) - (paren $ retVar linear v)- -- Lift the function into the matcher monad, and bind it to its name,- -- then add it the declaration to the store.- pushDecl $ nameBind s n $- app baseMatchFun e -- harp_matchX = baseMatch (\v -> Just (mf v))- return (n, [v], S) -- always binds v and only v-- where retVar :: Bool -> HsName -> HsExp- retVar linear v - -- if bound in linear context, apply const- | linear = metaConst (var v)- -- if bound in non-linear context, apply (:)- | otherwise = app consFun (var v) -- -- | Generate a declaration for matching a wildcard- mkWCMatch :: SrcLoc -> Tr MFunMetaInfo- mkWCMatch s = do - -- First we need a name...- n <- genMatchName- -- ... and then a function that always matches, discarding the result- let e = paren $ lamE s [wildcard] $ -- (\_ -> Just ())- app (var just_name) unit_con- -- ... which we lift, bind, and add to the store.- pushDecl $ nameBind s n $ -- harp_matchX = baseMatch (\_ -> Just ())- app baseMatchFun e- return (n, [], S) -- no variables bound, hence []-- -- | Generate a basic function that cases on a single element, - -- returning Just (all bound variables) on a match, and- -- Nothing on a mismatch.- mkBasePat :: SrcLoc -> Bool -> HsPat -> Tr MFunMetaInfo- mkBasePat s b p = - do -- First we need a name...- n <- genMatchName- -- ... and then we need to know what variables that - -- will be bound by this match.- let vs = gatherPVars p- -- ... and then we can create and store away a casing function.- basePatDecl s b n vs p >>= pushDecl- return (n, vs, S)-- where -- | Gather up the names of all variables in a pattern,- -- using a simple fold over the syntax structure.- gatherPVars :: HsPat -> [HsName]- gatherPVars p = case p of- HsPVar v -> [v]- HsPNeg q -> gatherPVars q- HsPInfixApp p1 _ p2 -> gatherPVars p1 ++- gatherPVars p2- HsPApp _ ps -> concatMap gatherPVars ps - HsPTuple ps -> concatMap gatherPVars ps - HsPList ps -> concatMap gatherPVars ps - HsPParen p -> gatherPVars p- HsPRec _ pfs -> concatMap help pfs- where help (HsPFieldPat _ p) = gatherPVars p- HsPAsPat n p -> n : gatherPVars p- HsPWildCard -> []- HsPIrrPat p -> gatherPVars p- HsPatTypeSig _ p _ -> gatherPVars p- HsPRPat _ rps -> concatMap gatherRPVars rps- HsPXTag _ _ attrs mattr cp -> - concatMap gatherAttrVars attrs ++ gatherPVars cp ++- case mattr of- Nothing -> []- Just ap -> gatherPVars ap- HsPXETag _ _ attrs mattr -> - concatMap gatherAttrVars attrs ++ - case mattr of- Nothing -> []- Just ap -> gatherPVars ap- HsPXPatTag p -> gatherPVars p- _ -> []-- gatherRPVars :: HsRPat -> [HsName]- gatherRPVars rp = case rp of- HsRPStar rq -> gatherRPVars rq- HsRPStarG rq -> gatherRPVars rq- HsRPPlus rq -> gatherRPVars rq- HsRPPlusG rq -> gatherRPVars rq- HsRPOpt rq -> gatherRPVars rq- HsRPOptG rq -> gatherRPVars rq- HsRPEither rq1 rq2 -> gatherRPVars rq1 ++ gatherRPVars rq2- HsRPSeq rqs -> concatMap gatherRPVars rqs- HsRPCAs n rq -> n : gatherRPVars rq- HsRPAs n rq -> n : gatherRPVars rq- HsRPParen rq -> gatherRPVars rq- HsRPPat q -> gatherPVars q- - gatherAttrVars :: HsPXAttr -> [HsName]- gatherAttrVars (HsPXAttr _ p) = gatherPVars p-- -- | Generate a basic casing function for a given pattern. - basePatDecl :: SrcLoc -> Bool -> HsName -> [HsName] -> HsPat -> Tr HsDecl- basePatDecl s linear f vs p = do- -- We can use the magic variable harp_a since nothing else needs to- -- be in scope at this time (we could use just a, or foo, or whatever)- let a = HsIdent $ "harp_a"- -- ... and we should case on that variable on the right-hand side.- rhs <- baseCaseE s linear p a vs -- case harp_a of ...- -- The result is a simple function with one paramenter and- -- the right-hand side we just generated.- return $ simpleFun s f a rhs- where baseCaseE :: SrcLoc -> Bool -> HsPat -> HsName -> [HsName] -> Tr HsExp- baseCaseE s b p a vs = do- -- First the alternative if we actually - -- match the given pattern- let alt1 = alt s p -- foo -> Just (mf foo)- (app (var just_name) $ - tuple (map (retVar b) vs))- -- .. and finally an alternative for not matching the pattern.- alt2 = alt s wildcard (var nothing_name) -- _ -> Nothing- -- ... and that pattern could itself contain regular patterns- -- so we must transform away these.- alt1' <- liftTr $ transformAlt alt1- return $ caseE (var a) [alt1', alt2]- retVar :: Bool -> HsName -> HsExp- retVar linear v- -- if bound in linear context, apply const- | linear = metaConst (var v)- -- if bound in non-linear context, apply (:)- | otherwise = app consFun (var v)-- -- | Generate a match function that lift the result of the- -- basic casing function into the matcher monad.- mkBaseMatch :: SrcLoc -> HsName -> Tr HsName- mkBaseMatch s name = - do -- First we need a name...- n <- genMatchName- -- ... to which we bind the lifting function- pushDecl $ baseMatchDecl s n name- -- and then return for others to use.- return n-- -- | Generate a declaration for the function that lifts a simple- -- casing function into the matcher monad.- baseMatchDecl :: SrcLoc -> HsName -> HsName -> HsDecl- baseMatchDecl s newname oldname = - -- Apply the lifting function "baseMatch" to the casing function- let e = app baseMatchFun (var oldname)- -- ... and bind it to the new name.- in nameBind s newname e -- harp_matchX = baseMatch harp_matchY--- -- For a sequence of regular patterns, we should transform all- -- sub-patterns and then generate a function for sequencing them.- HsRPSeq rps -> do - nvts <- mapM (trRPat s linear) rps- mkSeqDecl s nvts- - where -- | Generate a match function for a sequence of regular patterns,- -- flattening any special sub-patterns into normal elements of the list- mkSeqDecl :: SrcLoc -> [MFunMetaInfo] -> Tr MFunMetaInfo- mkSeqDecl s nvts = do- -- First, as always, we need a name...- name <- genMatchName- let -- We need a generating statement for each sub-pattern.- (gs, vals) = unzip $ mkGenExps s 0 nvts -- (harp_valX, (foo, ...)) <- harp_matchY- -- Gather up all variables from all sub-patterns.- vars = concatMap (\(_,vars,_) -> vars) nvts- -- ... flatten all values to simple lists, and concatenate- -- the lists to a new return value- fldecls = flattenVals s vals -- harp_valXf = $flatten harp_valX- -- harp_ret = foldComp [harp_val1f, ...]- -- ... return the value along with all variables- ret = qualStmt $ metaReturn $ -- return (harp_ret, (foo, .....))- tuple [var retname, varTuple vars]- -- ... do all these steps in a do expression- rhs = doE $ gs ++ -- do (harp_valX, (foo, ...)) <- harpMatchY- [letStmt fldecls, ret] -- let harp_valXf = $flatten harp_valX- -- return (harp_ret, (foo, .....))- -- ... bind it to its name, and add the declaration- -- to the store.- pushDecl $ nameBind s name rhs -- harp_matchZ = do ....- -- The return value of a sequence is always a list of elements.- return (name, vars, L S)-- -- | Flatten values of all sub-patterns into normal elements of the list- flattenVals :: SrcLoc -> [(HsName, MType)] -> [HsDecl]- flattenVals s nts = - let -- Flatten the values of all sub-patterns to - -- lists of elements- (nns, ds) = unzip $ map (flVal s) nts- -- ... and concatenate their results.- ret = nameBind s retname $ app- (paren $ app foldCompFun - (listE $ map var nns)) $ eList- in ds ++ [ret]- - - flVal :: SrcLoc -> (HsName, MType) -> (HsName, HsDecl)- flVal s (name, mt) =- let -- We reuse the old names, we just extend them a bit.- newname = extendVar name "f" -- harp_valXf- -- Create the appropriate flattening function depending- -- on the type of the value- f = flatten mt- -- ... apply it to the value and bind it to its new name.- in (newname, nameBind s newname $ -- harp_valXf = $flatten harp_valX- app f (var name))-- -- | Generate a flattening function for a given type structure.- flatten :: MType -> HsExp- flatten S = consFun -- (:)- flatten (L mt) = - let f = flatten mt- r = paren $ metaMap f- in paren $ foldCompFun `metaComp` r -- (foldComp . (map $flatten))- flatten (E mt1 mt2) = - let f1 = flatten mt1- f2 = flatten mt2- in paren $ metaEither f1 f2 -- (either $flatten $flatten)- flatten (M mt) = - let f = flatten mt- in paren $ metaMaybe idFun f -- (maybe id $flatten)-- -- For accumulating as-patterns we should transform the subpattern, and then generate - -- a declaration that supplies the value to be bound to the variable in question.- -- The variable should be bound non-linearly.- HsRPCAs v rp -> do - -- Transform the subpattern- nvt@(name, vs, mt) <- trRPat s linear rp- -- ... and create a declaration to bind its value.- n <- mkCAsDecl s nvt- -- The type of the value is unchanged.- return (n, (v:vs), mt)-- where -- | Generate a declaration for a @: binding.- mkCAsDecl :: SrcLoc -> MFunMetaInfo -> Tr HsName- mkCAsDecl = asDecl $ app consFun -- should become lists when applied to []--- -- For ordinary as-patterns we should transform the subpattern, and then generate - -- a declaration that supplies the value to be bound to the variable in question.- -- The variable should be bound linearly.- HsRPAs v rp - | linear -> - do -- Transform the subpattern- nvt@(name, vs, mt) <- trRPat s linear rp- -- ... and create a declaration to bind its value- n <- mkAsDecl s nvt- -- The type of the value is unchanged.- return (n, (v:vs), mt)- -- We may not use an @ bind in non-linear context- | otherwise -> case v of- HsIdent n -> fail $ "Attempting to bind variable "++n++- " inside the context of a numerable regular pattern"- _ -> fail $ "This should never ever ever happen...\- \ how the #% did you do it??!?"-- where -- | Generate a declaration for a @ binding.- mkAsDecl :: SrcLoc -> MFunMetaInfo -> Tr HsName- mkAsDecl = asDecl metaConst -- should be constant when applied to []--- -- For regular patterns, parentheses have no real meaning- -- so at this point we can just skip them.- HsRPParen rp -> trRPat s linear rp- - -- For (possibly non-greedy) optional regular patterns we need to- -- transform the subpattern, and the generate a function that can- -- choose to match or not to match, that is the question...- HsRPOpt rp -> - do -- Transform the subpattern- nvt <- trRPat s False rp- -- ... and create a declaration that can optionally match it.- mkOptDecl s False nvt- -- ... similarly for the non-greedy version.- HsRPOptG rp -> - do -- Transform the subpattern- nvt <- trRPat s False rp- -- ... and create a declaration that can optionally match it.- mkOptDecl s True nvt--- -- For union patterns, we should transform both subexpressions,- -- and generate a function that chooses between them.- HsRPEither rp1 rp2 -> - do -- Transform the subpatterns- nvt1 <- trRPat s False rp1- nvt2 <- trRPat s False rp2- -- ... and create a declaration that can choose between them.- mkEitherDecl s nvt1 nvt2- -- | Generate declarations for either patterns, i.e. ( | )- where mkEitherDecl :: SrcLoc -> MFunMetaInfo -> MFunMetaInfo -> Tr MFunMetaInfo- mkEitherDecl s nvt1@(_, vs1, t1) nvt2@(_, vs2, t2) = do- -- Eine namen, bitte!- n <- genMatchName- let -- Generate generators for the subpatterns- (g1, v1) = mkGenExp s nvt1- (g2, v2) = mkGenExp s nvt2 -- (harp_valX, (foo, bar, ...)) <- harp_matchY- -- ... gather all variables from both sides- allvs = vs1 `union` vs2- -- ... some may be bound on both sides, so we- -- need to check which ones are bound on each,- -- supplying empty value for those that are not- vals1 = map (varOrId vs1) allvs - vals2 = map (varOrId vs2) allvs- -- ... apply either Left or Right to the returned value- ret1 = metaReturn $ tuple -- return (Left harp_val1, (foo, id, ...))- [app (var left_name)- (var v1), tuple vals1]- ret2 = metaReturn $ tuple -- return (Right harp_val2, (id, bar, ...))- [app (var right_name)- (var v2), tuple vals2]- -- ... and do all these things in do-expressions- exp1 = doE [g1, qualStmt ret1]- exp2 = doE [g2, qualStmt ret2]- -- ... and choose between them using the choice (+++) operator.- rhs = (paren exp1) `metaChoice` -- (do ...) +++ - (paren exp2) -- (do ...)- -- Finally we create a declaration for this function and- -- add it to the store.- pushDecl $ nameBind s n rhs -- harp_matchZ = (do ...) ...- -- The type of the returned value is Either the type of the first- -- or the second subpattern.- return (n, allvs, E t1 t2)- - varOrId :: [HsName] -> HsName -> HsExp- varOrId vs v = if v `elem` vs -- the variable is indeed bound in this branch- then var v -- ... so it should be added to the result- else idFun -- ... else it should be empty.-- -- For (possibly non-greedy) repeating regular patterns we need to transform the subpattern,- -- and then generate a function to handle many matches of it.- HsRPStar rp -> - do -- Transform the subpattern- nvt <- trRPat s False rp- -- ... and create a declaration that can match it many times.- mkStarDecl s False nvt- -- ... and similarly for the non-greedy version.- HsRPStarG rp -> - do -- Transform the subpattern- nvt <- trRPat s False rp- -- ... and create a declaration that can match it many times.- mkStarDecl s True nvt-- -- For (possibly non-greedy) non-empty repeating patterns we need to transform the subpattern,- -- and then generate a function to handle one or more matches of it.- HsRPPlus rp -> - do -- Transform the subpattern- nvt <- trRPat s False rp- -- ... and create a declaration that can match it one or more times.- mkPlusDecl s False nvt- -- ... and similarly for the non-greedy version.- HsRPPlusG rp -> - do -- Transform the subpattern- nvt <- trRPat s False rp- -- ... and create a declaration that can match it one or more times.- mkPlusDecl s True nvt--- where -- These are the functions that must be in scope for more than one case alternative above.- - -- | Generate the generators that call sub-matching functions, and- -- annotate names with types for future flattening of values.- -- Iterate to enable gensym-like behavior.- mkGenExps :: SrcLoc -> Int -> [MFunMetaInfo] -> [(HsStmt, (HsName, MType))]- mkGenExps _ _ [] = []- mkGenExps s k ((name, vars, t):nvs) = - let valname = mkValName k -- harp_valX- pat = pTuple [pvar valname, pvarTuple vars] -- (harp_valX, (foo, bar, ...))- g = var name- in (genStmt s pat g, (valname, t)) : -- (harp_valX, (foo, ...)) <- harp_matchY- mkGenExps s (k+1) nvs-- -- | Create a single generator.- mkGenExp :: SrcLoc -> MFunMetaInfo -> (HsStmt, HsName)- mkGenExp s nvt = let [(g, (name, _t))] = mkGenExps s 0 [nvt]- in (g, name)-- -- | Generate a single generator with a call to (ng)manyMatch,- -- and an extra variable name to use after unzipping. - mkManyGen :: SrcLoc -> Bool -> HsName -> HsStmt- mkManyGen s greedy mname =- -- Choose which repeater function to use, determined by greed- let mf = if greedy then gManyMatchFun else manyMatchFun- -- ... and create a generator that applies it to the- -- matching function in question.- in genStmt s (pvar valsvarsname) $ - app mf (var mname)-- -- | Generate declarations for @: and @ bindings.- asDecl :: (HsExp -> HsExp) -> SrcLoc -> MFunMetaInfo -> Tr HsName- asDecl mf s nvt@(_, vs, _) = do- -- A name, if you would- n <- genMatchName -- harp_matchX- let -- Generate a generator for matching the subpattern- (g, val) = mkGenExp s nvt -- (harp_valY, (foo, ...)) <- harp_matchZ- -- ... fix the old variables- vars = map var vs -- (apa, bepa, ...)- -- ... and return the generated value, along with the- -- new set of variables which is the old set prepended- -- by the variable currently being bound.- ret = qualStmt $ metaReturn $ tuple -- return (harp_valY, ($mf harp_valY, apa, ...))- [var val, tuple $ mf (var val) : vars] -- mf in the line above is what separates- -- @: ((:)) from @ (const)- -- Finally we create a declaration for this function and - -- add it to the store.- pushDecl $ nameBind s n $ doE [g, ret] -- harp_matchX = do ...- return n-- -- | Generate declarations for optional patterns, ? and #?.- -- (Unfortunally we must place this function here since both variations- -- of transformations of optional patterns should be able to call it...)- mkOptDecl :: SrcLoc -> Bool -> MFunMetaInfo -> Tr MFunMetaInfo- mkOptDecl s greedy nvt@(_, vs, t) = do- -- Un nome, s'il vouz plaît.- n <- genMatchName- let -- Generate a generator for matching the subpattern- (g, val) = mkGenExp s nvt -- (harp_valX, (foo, bar, ...)) <- harp_matchY- -- ... and apply a Just to its value- ret1 = metaReturn $ tuple -- return (Just harp_val1, (foo, bar, ...))- [app (var just_name) - (var val), varTuple vs]- -- ... and do those two steps in a do-expression- exp1 = doE [g, qualStmt ret1] -- do ....- -- For the non-matching branch, all the variables should be empty- ids = map (const idFun) vs -- (id, id, ...)- -- ... and the value should be Nothing.- ret2 = metaReturn $ tuple -- return (Nothing, (id, id, ...))- [var nothing_name, tuple ids] -- i.e. no vars were bound- -- The order of the arguments to the choice (+++) operator - -- is determined by greed...- mc = if greedy - then metaChoice -- standard order- else (flip metaChoice) -- reversed order- -- ... and then apply it to the branches.- rhs = (paren exp1) `mc` -- (do ....) +++ - (paren ret2) -- (return (Nothing, .....))- -- Finally we create a declaration for this function and- -- add it to the store.- pushDecl $ nameBind s n rhs -- harp_matchZ = (do ....) +++ (return ....)- -- The type of the returned value will be Maybe the type- -- of the value of the subpattern.- return (n, vs, M t)- - -- | Generate declarations for star patterns, * and #*- -- (Unfortunally we must place this function here since both variations- -- of transformations of repeating patterns should be able to call it...)- mkStarDecl :: SrcLoc -> Bool -> MFunMetaInfo -> Tr MFunMetaInfo- mkStarDecl s greedy (mname, vs, t) = do- -- Ett namn, tack!- n <- genMatchName- let -- Create a generator that matches the subpattern- -- many times, either greedily or non-greedily- g = mkManyGen s greedy mname- -- ... and unzip the result, choosing the proper unzip- -- function depending on the number of variables returned.- metaUnzipK = mkMetaUnzip s (length vs)- -- ... first unzip values from variables- dec1 = patBind s (pvarTuple [valname, varsname])- (metaUnzip $ var valsvarsname)- -- ... and then unzip the variables- dec2 = patBind s (pvarTuple vs)- (metaUnzipK $ var varsname)- -- ... fold all the values for variables- retExps = map ((app foldCompFun) . var) vs- -- ... and return value and variables- ret = metaReturn $ tuple $- [var valname, tuple retExps]- -- Finally we need to generate a function that does all this,- -- using a let-statement for the non-monadic stuff and a- -- do-expression to wrap it all in.- pushDecl $ nameBind s n $- doE [g, letStmt [dec1, dec2], qualStmt ret]- -- The type of the returned value is a list ([]) of the- -- type of the subpattern.- return (n, vs, L t)- - -- | Generate declarations for plus patterns, + and #+- -- (Unfortunally we must place this function here since both variations- -- of transformations of non-empty repeating patterns should be able to call it...)- mkPlusDecl :: SrcLoc -> Bool -> MFunMetaInfo -> Tr MFunMetaInfo- mkPlusDecl s greedy nvt@(mname, vs, t) = do- -- and now I've run out of languages...- n <- genMatchName- let k = length vs- -- First we want a generator to match the- -- subpattern exactly one time- (g1, val1) = mkGenExp s nvt -- (harp_valX, (foo, ...)) <- harpMatchY- -- ... and then one that matches it many times.- g2 = mkManyGen s greedy mname -- harp_vvs <- manyMatch harpMatchY- -- ... we want to unzip the result, using- -- the proper unzip function- metaUnzipK = mkMetaUnzip s k- -- ... first unzip values from variables- dec1 = patBind s -- (harp_vals, harp_vars) = unzip harp_vvs- (pvarTuple [valsname, varsname])- (metaUnzip $ var valsvarsname)- -- .. now we need new fresh names for variables- -- since the ordinary ones are already taken.- vlvars = genNames "harp_vl" k- -- ... and then we can unzip the variables- dec2 = patBind s (pvarTuple vlvars) -- (harp_vl1, ...) = unzipK harp_vars- (metaUnzipK $ var varsname)- -- .. and do the unzipping in a let-statement- letSt = letStmt [dec1, dec2]- -- ... fold variables from the many-match,- -- prepending the variables from the single match- retExps = map mkRetFormat $ zip vs vlvars -- foo . (foldComp harp_vl1), ...- -- ... prepend values from the single match to- -- those of the many-match.- retVal = (var val1) `metaCons` - (var valsname) -- harp_valX : harp_vals- -- ... return all values and variables- ret = metaReturn $ tuple $ -- return (harp_valX:harpVals, - [retVal, tuple retExps] -- (foo . (...), ...))- -- ... and wrap all of it in a do-expression.- rhs = doE [g1, g2, letSt, qualStmt ret]- -- Finally we create a declaration for this function and- -- add it to the store.- pushDecl $ nameBind s n rhs- -- The type of the returned value is a list ([]) of the- -- type of the subpattern.- return (n, vs, L t)-- where mkRetFormat :: (HsName, HsName) -> HsExp- mkRetFormat (v, vl) =- -- Prepend variables using function composition.- (var v) `metaComp`- (paren $ (app foldCompFun) $ var vl)-------------------------------------------------------------------------------- HaRP-specific functions and ids---- | Functions and ids from the @Match@ module, --- used in the generated matching functions-runMatchFun, baseMatchFun, manyMatchFun, gManyMatchFun :: HsExp-runMatchFun = match_qual runMatch_name-baseMatchFun = match_qual baseMatch_name-manyMatchFun = match_qual manyMatch_name-gManyMatchFun = match_qual gManyMatch_name--runMatch_name, baseMatch_name, manyMatch_name, gManyMatch_name :: HsName-runMatch_name = HsIdent "runMatch"-baseMatch_name = HsIdent "baseMatch"-manyMatch_name = HsIdent "manyMatch"-gManyMatch_name = HsIdent "gManyMatch"--match_mod, match_qual_mod :: Module-match_mod = Module "Harp.Match"-match_qual_mod = Module "HaRPMatch"--match_qual :: HsName -> HsExp-match_qual = qvar match_qual_mod--choiceOp :: HsQOp-choiceOp = HsQVarOp $ Qual match_qual_mod choice--appendOp :: HsQOp-appendOp = HsQVarOp $ UnQual append---- foldComp = foldl (.) id, i.e. fold by composing-foldCompFun :: HsExp-foldCompFun = match_qual $ HsIdent "foldComp"--mkMetaUnzip :: SrcLoc -> Int -> HsExp -> HsExp-mkMetaUnzip s k | k <= 7 = let n = "unzip" ++ show k- in (\e -> matchFunction n [e])- | otherwise = - let vs = genNames "x" k- lvs = genNames "xs" k- uz = name $ "unzip" ++ show k- ys = name "ys"- xs = name "xs"- alt1 = alt s peList $ tuple $ replicate k eList -- [] -> ([], [], ...)- pat2 = (pvarTuple vs) `metaPCons` (pvar xs) -- (x1, x2, ...)- ret2 = tuple $ map appCons $ zip vs lvs -- (x1:xs1, x2:xs2, ...)- rhs2 = app (var uz) (var xs) -- unzipK xs- dec2 = patBind s (pvarTuple lvs) rhs2 -- (xs1, xs2, ...) = unzipK xs- exp2 = letE [dec2] ret2- alt2 = alt s pat2 exp2- topexp = lamE s [pvar ys] $ caseE (var ys) [alt1, alt2]- topbind = nameBind s uz topexp- in app (paren $ letE [topbind] (var uz))- where appCons :: (HsName, HsName) -> HsExp- appCons (x, xs) = metaCons (var x) (var xs)--matchFunction :: String -> [HsExp] -> HsExp-matchFunction s es = mf s (reverse es)- where mf s [] = match_qual $ HsIdent s- mf s (e:es) = app (mf s es) e---- | Some 'magic' gensym-like functions, and functions--- with related functionality.-retname :: HsName-retname = name "harp_ret"--varsname :: HsName-varsname = name "harp_vars"--valname :: HsName-valname = name "harp_val"--valsname :: HsName-valsname = name "harp_vals"--valsvarsname :: HsName-valsvarsname = name "harp_vvs"--mkValName :: Int -> HsName-mkValName k = name $ "harp_val" ++ show k--extendVar :: HsName -> String -> HsName-extendVar (HsIdent n) s = HsIdent $ n ++ s-extendVar n _ = n--xNameParts :: HsXName -> (Maybe String, String)-xNameParts n = case n of- HsXName s -> (Nothing, s)- HsXDomName d s -> (Just d, s)-------------------------------------------------------------- meta-level functions, i.e. functions that represent functions, --- and that take arguments representing arguments... whew!--metaReturn, metaConst, metaMap, metaUnzip :: HsExp -> HsExp-metaReturn e = metaFunction "return" [e]-metaConst e = metaFunction "const" [e]-metaMap e = metaFunction "map" [e]-metaUnzip e = metaFunction "unzip" [e]--metaEither, metaMaybe :: HsExp -> HsExp -> HsExp-metaEither e1 e2 = metaFunction "either" [e1,e2]-metaMaybe e1 e2 = metaFunction "maybe" [e1,e2]--metaConcat :: [HsExp] -> HsExp-metaConcat es = metaFunction "concat" [listE es]--metaAppend :: HsExp -> HsExp -> HsExp-metaAppend l1 l2 = infixApp l1 appendOp l2---- the +++ choice operator-metaChoice :: HsExp -> HsExp -> HsExp-metaChoice e1 e2 = infixApp e1 choiceOp e2--metaPCons :: HsPat -> HsPat -> HsPat-metaPCons p1 p2 = HsPInfixApp p1 cons p2--metaCons, metaComp :: HsExp -> HsExp -> HsExp-metaCons e1 e2 = infixApp e1 (HsQConOp cons) e2-metaComp e1 e2 = infixApp e1 (op fcomp) e2--metaPJust :: HsPat -> HsPat-metaPJust p = pApp just_name [p]--metaPNothing :: HsPat-metaPNothing = pvar nothing_name--metaPMkMaybe :: Maybe HsPat -> HsPat-metaPMkMaybe mp = case mp of- Nothing -> metaPNothing- Just p -> pParen $ metaPJust p--metaJust :: HsExp -> HsExp-metaJust e = app (var just_name) e--metaNothing :: HsExp-metaNothing = var nothing_name--metaMkMaybe :: Maybe HsExp -> HsExp-metaMkMaybe me = case me of- Nothing -> metaNothing- Just e -> paren $ metaJust e-------------------------------------------------------- some other useful functions at abstract level-consFun, idFun :: HsExp-consFun = HsCon cons-idFun = function "id"--cons :: HsQName-cons = Special HsCons--fcomp, choice, append :: HsName-fcomp = HsSymbol "."-choice = HsSymbol "+++"-append = HsSymbol "++"--just_name, nothing_name, left_name, right_name :: HsName-just_name = HsIdent "Just"-nothing_name = HsIdent "Nothing"-left_name = HsIdent "Left"-right_name = HsIdent "Right"----------------------------------------------------------------------------- Help functions for meta programming xml--hsx_data_mod :: Module-hsx_data_mod = Module "HSP.Data"---- | Create an xml PCDATA value-metaMkPcdata :: String -> HsExp-metaMkPcdata s = metaFunction "pcdata" [strE s]---- | Create an xml tag, given its domain, name, attributes and--- children.-metaMkTag :: HsXName -> [HsExp] -> Maybe HsExp -> [HsExp] -> HsExp-metaMkTag name ats mat cs = - let (d,n) = xNameParts name- ne = tuple [metaMkMaybe $ fmap strE d, strE n]- m = maybe id (\x y -> paren $ y `metaAppend` (metaMap $ metaToAttribute x)) mat- attrs = m $ listE $ map metaToAttribute ats- in metaFunction "genTag" [ne, attrs, listE cs]---- | Create an empty xml tag, given its domain, name and attributes.-metaMkETag :: HsXName -> [HsExp] -> Maybe HsExp -> HsExp-metaMkETag name ats mat = - let (d,n) = xNameParts name- ne = tuple [metaMkMaybe $ fmap strE d, strE n]- m = maybe id (\x y -> paren $ y `metaAppend` (metaMap $ metaToAttribute x)) mat- attrs = m $ listE $ map metaToAttribute ats- in metaFunction "genETag" [ne, attrs]---- | Create an attribute by applying the overloaded @toAttribute@-metaToAttribute :: HsExp -> HsExp-metaToAttribute e = metaFunction "toAttribute" [e]---- | Create a property from an attribute and a value.-metaAssign :: HsExp -> HsExp -> HsExp-metaAssign e1 e2 = infixApp e1 assignOp e2- where assignOp = HsQVarOp $ UnQual $ HsSymbol ":="---- | Make xml out of some expression by applying the overloaded function--- @toXml@.-metaToXmls :: HsExp -> HsExp-metaToXmls e = metaFunction "toXMLs" [paren e]---- | Lookup an attribute in the set of attributes.-metaExtract :: HsXName -> HsName -> HsExp-metaExtract name attrs = - let (d,n) = xNameParts name- np = tuple [metaMkMaybe $ fmap strE d, strE n]- in metaFunction "extract" [np, var attrs]---- | Generate a pattern under the Tag data constructor.-metaTag :: (Maybe String) -> String -> HsPat -> HsPat -> HsPat-metaTag dom name ats cpat =- let d = metaPMkMaybe $ fmap strP dom- n = pTuple [d, strP name]- in metaConPat "Tag" [n, ats, cpat]- --- | Generate a pattern under the PCDATA data constructor.-metaPcdata :: String -> HsPat-metaPcdata s = metaConPat "PCDATA" [strP s]--metaMkName :: HsXName -> HsExp-metaMkName n = case n of- HsXName s -> strE s- HsXDomName d s -> tuple [strE d, strE s]
haskell-src-exts.cabal view
@@ -1,32 +1,33 @@ Name: haskell-src-exts-Version: 0.2.1-License: BSD4+Version: 0.3.2+License: BSD3 License-File: LICENSE Author: Niklas Broberg Maintainer: Niklas Broberg <nibro@cs.chalmers.se> Category: Language Synopsis: Manipulating Haskell source: abstract syntax, lexer, parser, and pretty-printer-Description: Haskell-Source with eXtensions (HSX, haskell-src-exts)+Description: Haskell-Source with Extensions (HSE, haskell-src-exts) is an extension of the standard haskell-src package, and handles most common syntactic extensions to Haskell, including: . * Multi-parameter type classes with functional dependencies .+ * Indexed type families (including associated types)+ . * Empty data declarations . * GADTs . * Implicit parameters (ghc and hugs style) .- * Template Haskell (broken for 6.4, needs redoing)+ * Template Haskell (broken for 6.4+, needs redoing) . and a few more. Apart from these standard extensions, it also handles regular patterns as per the HaRP extension- as well as HSP-style embedded XML syntax (HSP release imminent).+ as well as HSX-style embedded XML syntax (new HSP/HSX release imminent). . For details on usage, please see the website.-Homepage: http://www.cs.chalmers.se/~d00nibro/harp/-+Homepage: http://code.haskell.org/HSP/haskell-src-exts Stability: Experimental Tested-with: GHC==6.8.2 Build-Type: Simple@@ -36,19 +37,18 @@ Description: Choose the new smaller, split-up base package. Library- Build-Tools: happy+ Build-Tools: happy >= 1.17 Build-Depends: base if flag(splitBase) Build-Depends: base >= 3, array >= 0.1, pretty >= 1.0 else Build-Depends: base < 3 - Exposed-modules: Language.Haskell.Hsx,- Language.Haskell.Hsx.Parser,- Language.Haskell.Hsx.Pretty,- Language.Haskell.Hsx.Transform,- Language.Haskell.Hsx.Syntax,- Language.Haskell.Hsx.Build- Other-modules: Language.Haskell.Hsx.ParseMonad,- Language.Haskell.Hsx.Lexer,- Language.Haskell.Hsx.ParseUtils+ Exposed-modules: Language.Haskell.Exts,+ Language.Haskell.Exts.Parser,+ Language.Haskell.Exts.Pretty,+ Language.Haskell.Exts.Syntax,+ Language.Haskell.Exts.Build+ Other-modules: Language.Haskell.Exts.ParseMonad,+ Language.Haskell.Exts.Lexer,+ Language.Haskell.Exts.ParseUtils