haskell-src-exts 1.1.1 → 1.1.3
raw patch · 13 files changed
+16622/−4 lines, 13 filesdep ~base
Dependency ranges changed: base
Files
- dist/build/Language/Haskell/Exts/Annotated/Parser.hs +7985/−0
- haskell-src-exts.cabal +16/−3
- src/Language/Haskell/Exts/Annotated.hs +99/−0
- src/Language/Haskell/Exts/Annotated/Build.hs +290/−0
- src/Language/Haskell/Exts/Annotated/Comments.hs +20/−0
- src/Language/Haskell/Exts/Annotated/Fixity.hs +356/−0
- src/Language/Haskell/Exts/Annotated/Lexer.hs +1055/−0
- src/Language/Haskell/Exts/Annotated/ParseMonad.hs +405/−0
- src/Language/Haskell/Exts/Annotated/ParseUtils.hs +1242/−0
- src/Language/Haskell/Exts/Annotated/Parser.ly +1796/−0
- src/Language/Haskell/Exts/Annotated/Pretty.hs +1238/−0
- src/Language/Haskell/Exts/Annotated/Syntax.hs +2118/−0
- src/Language/Haskell/Exts/ParseMonad.hs +2/−1
+ dist/build/Language/Haskell/Exts/Annotated/Parser.hs view
@@ -0,0 +1,7985 @@+{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-} +{-# OPTIONS -fglasgow-exts -cpp #-} +----------------------------------------------------------------------------- +-- | +-- Module : Language.Haskell.Exts.Parser +-- Copyright : (c) Niklas Broberg 2004-2009, +-- Original (c) Simon Marlow, Sven Panne 1997-2000 +-- License : BSD-style (see the file LICENSE.txt) +-- +-- Maintainer : Niklas Broberg, d00nibro@chalmers.se +-- Stability : stable +-- Portability : portable +-- +-- +----------------------------------------------------------------------------- +module Language.Haskell.Exts.Annotated.Parser ( + -- * General parsing + Parseable(..), + ParseMode(..), defaultParseMode, ParseResult(..), fromParseResult, + -- * Parsing of specific AST elements + -- ** Modules + parseModule, parseModuleWithMode, parseModuleWithComments, + -- ** Expressions + parseExp, parseExpWithMode, parseExpWithComments, + -- ** Patterns + parsePat, parsePatWithMode, parsePatWithComments, + -- ** Declarations + parseDecl, parseDeclWithMode, parseDeclWithComments, + -- ** Types + parseType, parseTypeWithMode, parseTypeWithComments, + -- ** Option pragmas + getTopPragmas + ) where +import Language.Haskell.Exts.Annotated.SrcLoc +import Language.Haskell.Exts.Annotated.Syntax hiding ( Type(..), Exp(..), Asst(..), XAttr(..), FieldUpdate(..) ) +import Language.Haskell.Exts.Annotated.Syntax ( Type, Exp, Asst ) +import Language.Haskell.Exts.Annotated.ParseMonad +import Language.Haskell.Exts.Annotated.Lexer +import Language.Haskell.Exts.Annotated.ParseUtils +import Language.Haskell.Exts.Annotated.Comments ( Comment ) +import Language.Haskell.Exts.Annotated.Fixity +import Language.Haskell.Exts.Extension + +import Control.Monad ( liftM ) +#if __GLASGOW_HASKELL__ >= 503 +import qualified Data.Array as Happy_Data_Array +#else +import qualified Array as Happy_Data_Array +#endif +#if __GLASGOW_HASKELL__ >= 503 +import qualified GHC.Exts as Happy_GHC_Exts +#else +import qualified GlaExts as Happy_GHC_Exts +#endif + +-- parser produced by Happy Version 1.18.4 + +newtype HappyAbsSyn = HappyAbsSyn HappyAny +#if __GLASGOW_HASKELL__ >= 607 +type HappyAny = Happy_GHC_Exts.Any +#else +type HappyAny = forall a . a +#endif +happyIn9 :: (Module L) -> (HappyAbsSyn ) +happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn9 #-} +happyOut9 :: (HappyAbsSyn ) -> (Module L) +happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut9 #-} +happyIn10 :: (PExp L) -> (HappyAbsSyn ) +happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn10 #-} +happyOut10 :: (HappyAbsSyn ) -> (PExp L) +happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut10 #-} +happyIn11 :: (([OptionPragma L],[S],L)) -> (HappyAbsSyn ) +happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn11 #-} +happyOut11 :: (HappyAbsSyn ) -> (([OptionPragma L],[S],L)) +happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut11 #-} +happyIn12 :: (([OptionPragma L],[S],Maybe L)) -> (HappyAbsSyn ) +happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn12 #-} +happyOut12 :: (HappyAbsSyn ) -> (([OptionPragma L],[S],Maybe L)) +happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut12 #-} +happyIn13 :: (OptionPragma L) -> (HappyAbsSyn ) +happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn13 #-} +happyOut13 :: (HappyAbsSyn ) -> (OptionPragma L) +happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut13 #-} +happyIn14 :: (([Name L],[S])) -> (HappyAbsSyn ) +happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn14 #-} +happyOut14 :: (HappyAbsSyn ) -> (([Name L],[S])) +happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut14 #-} +happyIn15 :: ([OptionPragma L] -> [S] -> L -> Module L) -> (HappyAbsSyn ) +happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn15 #-} +happyOut15 :: (HappyAbsSyn ) -> ([OptionPragma L] -> [S] -> L -> Module L) +happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut15 #-} +happyIn16 :: (Maybe (ModuleHead L)) -> (HappyAbsSyn ) +happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn16 #-} +happyOut16 :: (HappyAbsSyn ) -> (Maybe (ModuleHead L)) +happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut16 #-} +happyIn17 :: (Maybe (WarningText L)) -> (HappyAbsSyn ) +happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn17 #-} +happyOut17 :: (HappyAbsSyn ) -> (Maybe (WarningText L)) +happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut17 #-} +happyIn18 :: (([ImportDecl L],[Decl L],[S],Bool,L)) -> (HappyAbsSyn ) +happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn18 #-} +happyOut18 :: (HappyAbsSyn ) -> (([ImportDecl L],[Decl L],[S],Bool,L)) +happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut18 #-} +happyIn19 :: (([ImportDecl L],[Decl L],[S])) -> (HappyAbsSyn ) +happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn19 #-} +happyOut19 :: (HappyAbsSyn ) -> (([ImportDecl L],[Decl L],[S])) +happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut19 #-} +happyIn20 :: ([S]) -> (HappyAbsSyn ) +happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn20 #-} +happyOut20 :: (HappyAbsSyn ) -> ([S]) +happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut20 #-} +happyIn21 :: ([S]) -> (HappyAbsSyn ) +happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn21 #-} +happyOut21 :: (HappyAbsSyn ) -> ([S]) +happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut21 #-} +happyIn22 :: (Maybe (ExportSpecList L)) -> (HappyAbsSyn ) +happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn22 #-} +happyOut22 :: (HappyAbsSyn ) -> (Maybe (ExportSpecList L)) +happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut22 #-} +happyIn23 :: (ExportSpecList L) -> (HappyAbsSyn ) +happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn23 #-} +happyOut23 :: (HappyAbsSyn ) -> (ExportSpecList L) +happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut23 #-} +happyIn24 :: ([S]) -> (HappyAbsSyn ) +happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn24 #-} +happyOut24 :: (HappyAbsSyn ) -> ([S]) +happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut24 #-} +happyIn25 :: (([ExportSpec L],[S])) -> (HappyAbsSyn ) +happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn25 #-} +happyOut25 :: (HappyAbsSyn ) -> (([ExportSpec L],[S])) +happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut25 #-} +happyIn26 :: (ExportSpec L) -> (HappyAbsSyn ) +happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn26 #-} +happyOut26 :: (HappyAbsSyn ) -> (ExportSpec L) +happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut26 #-} +happyIn27 :: (([ImportDecl L],[S])) -> (HappyAbsSyn ) +happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn27 #-} +happyOut27 :: (HappyAbsSyn ) -> (([ImportDecl L],[S])) +happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut27 #-} +happyIn28 :: (ImportDecl L) -> (HappyAbsSyn ) +happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn28 #-} +happyOut28 :: (HappyAbsSyn ) -> (ImportDecl L) +happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut28 #-} +happyIn29 :: ((Bool,[S])) -> (HappyAbsSyn ) +happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn29 #-} +happyOut29 :: (HappyAbsSyn ) -> ((Bool,[S])) +happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut29 #-} +happyIn30 :: ((Bool,[S])) -> (HappyAbsSyn ) +happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn30 #-} +happyOut30 :: (HappyAbsSyn ) -> ((Bool,[S])) +happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut30 #-} +happyIn31 :: ((Maybe String,[S])) -> (HappyAbsSyn ) +happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn31 #-} +happyOut31 :: (HappyAbsSyn ) -> ((Maybe String,[S])) +happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut31 #-} +happyIn32 :: ((Maybe (ModuleName L),[S],Maybe L)) -> (HappyAbsSyn ) +happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn32 #-} +happyOut32 :: (HappyAbsSyn ) -> ((Maybe (ModuleName L),[S],Maybe L)) +happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut32 #-} +happyIn33 :: (Maybe (ImportSpecList L)) -> (HappyAbsSyn ) +happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn33 #-} +happyOut33 :: (HappyAbsSyn ) -> (Maybe (ImportSpecList L)) +happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut33 #-} +happyIn34 :: (ImportSpecList L) -> (HappyAbsSyn ) +happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn34 #-} +happyOut34 :: (HappyAbsSyn ) -> (ImportSpecList L) +happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut34 #-} +happyIn35 :: ((Bool, Maybe L,[S])) -> (HappyAbsSyn ) +happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn35 #-} +happyOut35 :: (HappyAbsSyn ) -> ((Bool, Maybe L,[S])) +happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut35 #-} +happyIn36 :: (([ImportSpec L],[S])) -> (HappyAbsSyn ) +happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn36 #-} +happyOut36 :: (HappyAbsSyn ) -> (([ImportSpec L],[S])) +happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut36 #-} +happyIn37 :: (ImportSpec L) -> (HappyAbsSyn ) +happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn37 #-} +happyOut37 :: (HappyAbsSyn ) -> (ImportSpec L) +happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut37 #-} +happyIn38 :: (([CName L],[S])) -> (HappyAbsSyn ) +happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn38 #-} +happyOut38 :: (HappyAbsSyn ) -> (([CName L],[S])) +happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut38 #-} +happyIn39 :: (CName L) -> (HappyAbsSyn ) +happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn39 #-} +happyOut39 :: (HappyAbsSyn ) -> (CName L) +happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut39 #-} +happyIn40 :: (Decl L) -> (HappyAbsSyn ) +happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn40 #-} +happyOut40 :: (HappyAbsSyn ) -> (Decl L) +happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut40 #-} +happyIn41 :: ((Maybe Int, [S])) -> (HappyAbsSyn ) +happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn41 #-} +happyOut41 :: (HappyAbsSyn ) -> ((Maybe Int, [S])) +happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut41 #-} +happyIn42 :: (Assoc L) -> (HappyAbsSyn ) +happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn42 #-} +happyOut42 :: (HappyAbsSyn ) -> (Assoc L) +happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut42 #-} +happyIn43 :: (([Op L],[S],L)) -> (HappyAbsSyn ) +happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn43 #-} +happyOut43 :: (HappyAbsSyn ) -> (([Op L],[S],L)) +happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut43 #-} +happyIn44 :: (([Decl L],[S])) -> (HappyAbsSyn ) +happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn44 #-} +happyOut44 :: (HappyAbsSyn ) -> (([Decl L],[S])) +happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut44 #-} +happyIn45 :: (([Decl L],[S])) -> (HappyAbsSyn ) +happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn45 #-} +happyOut45 :: (HappyAbsSyn ) -> (([Decl L],[S])) +happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut45 #-} +happyIn46 :: (Decl L) -> (HappyAbsSyn ) +happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn46 #-} +happyOut46 :: (HappyAbsSyn ) -> (Decl L) +happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut46 #-} +happyIn47 :: (DataOrNew L) -> (HappyAbsSyn ) +happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn47 #-} +happyOut47 :: (HappyAbsSyn ) -> (DataOrNew L) +happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut47 #-} +happyIn48 :: (([Type L],[S])) -> (HappyAbsSyn ) +happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn48 #-} +happyOut48 :: (HappyAbsSyn ) -> (([Type L],[S])) +happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut48 #-} +happyIn49 :: (([Decl L],[S])) -> (HappyAbsSyn ) +happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn49 #-} +happyOut49 :: (HappyAbsSyn ) -> (([Decl L],[S])) +happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut49 #-} +happyIn50 :: (([Decl L],[S])) -> (HappyAbsSyn ) +happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn50 #-} +happyOut50 :: (HappyAbsSyn ) -> (([Decl L],[S])) +happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut50 #-} +happyIn51 :: (Decl L) -> (HappyAbsSyn ) +happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn51 #-} +happyOut51 :: (HappyAbsSyn ) -> (Decl L) +happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut51 #-} +happyIn52 :: (Binds L) -> (HappyAbsSyn ) +happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn52 #-} +happyOut52 :: (HappyAbsSyn ) -> (Binds L) +happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut52 #-} +happyIn53 :: (Decl L) -> (HappyAbsSyn ) +happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn53 #-} +happyOut53 :: (HappyAbsSyn ) -> (Decl L) +happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut53 #-} +happyIn54 :: (([Type L],[S])) -> (HappyAbsSyn ) +happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn54 #-} +happyOut54 :: (HappyAbsSyn ) -> (([Type L],[S])) +happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut54 #-} +happyIn55 :: (Type L) -> (HappyAbsSyn ) +happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn55 #-} +happyOut55 :: (HappyAbsSyn ) -> (Type L) +happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut55 #-} +happyIn56 :: (Binds L) -> (HappyAbsSyn ) +happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn56 #-} +happyOut56 :: (HappyAbsSyn ) -> (Binds L) +happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut56 #-} +happyIn57 :: (([Name L],[S],L)) -> (HappyAbsSyn ) +happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn57 #-} +happyOut57 :: (HappyAbsSyn ) -> (([Name L],[S],L)) +happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut57 #-} +happyIn58 :: (CallConv L) -> (HappyAbsSyn ) +happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn58 #-} +happyOut58 :: (HappyAbsSyn ) -> (CallConv L) +happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut58 #-} +happyIn59 :: (Maybe (Safety L)) -> (HappyAbsSyn ) +happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn59 #-} +happyOut59 :: (HappyAbsSyn ) -> (Maybe (Safety L)) +happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut59 #-} +happyIn60 :: ((String, Name L, Type L, [S])) -> (HappyAbsSyn ) +happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn60 #-} +happyOut60 :: (HappyAbsSyn ) -> ((String, Name L, Type L, [S])) +happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut60 #-} +happyIn61 :: ([Rule L]) -> (HappyAbsSyn ) +happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn61 #-} +happyOut61 :: (HappyAbsSyn ) -> ([Rule L]) +happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut61 #-} +happyIn62 :: (Rule L) -> (HappyAbsSyn ) +happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn62 #-} +happyOut62 :: (HappyAbsSyn ) -> (Rule L) +happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut62 #-} +happyIn63 :: (Maybe (Activation L)) -> (HappyAbsSyn ) +happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn63 #-} +happyOut63 :: (HappyAbsSyn ) -> (Maybe (Activation L)) +happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut63 #-} +happyIn64 :: ((Maybe [RuleVar L],[S])) -> (HappyAbsSyn ) +happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn64 #-} +happyOut64 :: (HappyAbsSyn ) -> ((Maybe [RuleVar L],[S])) +happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut64 #-} +happyIn65 :: ([RuleVar L]) -> (HappyAbsSyn ) +happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn65 #-} +happyOut65 :: (HappyAbsSyn ) -> ([RuleVar L]) +happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut65 #-} +happyIn66 :: (RuleVar L) -> (HappyAbsSyn ) +happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn66 #-} +happyOut66 :: (HappyAbsSyn ) -> (RuleVar L) +happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut66 #-} +happyIn67 :: (([([Name L],String)],[S])) -> (HappyAbsSyn ) +happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn67 #-} +happyOut67 :: (HappyAbsSyn ) -> (([([Name L],String)],[S])) +happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut67 #-} +happyIn68 :: ((([Name L], String),[S])) -> (HappyAbsSyn ) +happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn68 #-} +happyOut68 :: (HappyAbsSyn ) -> ((([Name L], String),[S])) +happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut68 #-} +happyIn69 :: (([Name L],[S])) -> (HappyAbsSyn ) +happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn69 #-} +happyOut69 :: (HappyAbsSyn ) -> (([Name L],[S])) +happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut69 #-} +happyIn70 :: (Name L) -> (HappyAbsSyn ) +happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn70 #-} +happyOut70 :: (HappyAbsSyn ) -> (Name L) +happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut70 #-} +happyIn71 :: (Type L) -> (HappyAbsSyn ) +happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn71 #-} +happyOut71 :: (HappyAbsSyn ) -> (Type L) +happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut71 #-} +happyIn72 :: (PType L) -> (HappyAbsSyn ) +happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn72 #-} +happyOut72 :: (HappyAbsSyn ) -> (PType L) +happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut72 #-} +happyIn73 :: (Type L) -> (HappyAbsSyn ) +happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn73 #-} +happyOut73 :: (HappyAbsSyn ) -> (Type L) +happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut73 #-} +happyIn74 :: (PType L) -> (HappyAbsSyn ) +happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn74 #-} +happyOut74 :: (HappyAbsSyn ) -> (PType L) +happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut74 #-} +happyIn75 :: (Type L) -> (HappyAbsSyn ) +happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn75 #-} +happyOut75 :: (HappyAbsSyn ) -> (Type L) +happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut75 #-} +happyIn76 :: (PType L) -> (HappyAbsSyn ) +happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn76 #-} +happyOut76 :: (HappyAbsSyn ) -> (PType L) +happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut76 #-} +happyIn77 :: (Type L) -> (HappyAbsSyn ) +happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn77 #-} +happyOut77 :: (HappyAbsSyn ) -> (Type L) +happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut77 #-} +happyIn78 :: (PType L) -> (HappyAbsSyn ) +happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn78 #-} +happyOut78 :: (HappyAbsSyn ) -> (PType L) +happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut78 #-} +happyIn79 :: (QName L) -> (HappyAbsSyn ) +happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn79 #-} +happyOut79 :: (HappyAbsSyn ) -> (QName L) +happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut79 #-} +happyIn80 :: (QName L) -> (HappyAbsSyn ) +happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn80 #-} +happyOut80 :: (HappyAbsSyn ) -> (QName L) +happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut80 #-} +happyIn81 :: (QName L) -> (HappyAbsSyn ) +happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn81 #-} +happyOut81 :: (HappyAbsSyn ) -> (QName L) +happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut81 #-} +happyIn82 :: (Type L) -> (HappyAbsSyn ) +happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn82 #-} +happyOut82 :: (HappyAbsSyn ) -> (Type L) +happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut82 #-} +happyIn83 :: (PType L) -> (HappyAbsSyn ) +happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn83 #-} +happyOut83 :: (HappyAbsSyn ) -> (PType L) +happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut83 #-} +happyIn84 :: (PContext L) -> (HappyAbsSyn ) +happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn84 #-} +happyOut84 :: (HappyAbsSyn ) -> (PContext L) +happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut84 #-} +happyIn85 :: (([PType L],[S])) -> (HappyAbsSyn ) +happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn85 #-} +happyOut85 :: (HappyAbsSyn ) -> (([PType L],[S])) +happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut85 #-} +happyIn86 :: (([PType L],[S])) -> (HappyAbsSyn ) +happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn86 #-} +happyOut86 :: (HappyAbsSyn ) -> (([PType L],[S])) +happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut86 #-} +happyIn87 :: (([TyVarBind L],Maybe L)) -> (HappyAbsSyn ) +happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn87 #-} +happyOut87 :: (HappyAbsSyn ) -> (([TyVarBind L],Maybe L)) +happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut87 #-} +happyIn88 :: (TyVarBind L) -> (HappyAbsSyn ) +happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn88 #-} +happyOut88 :: (HappyAbsSyn ) -> (TyVarBind L) +happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut88 #-} +happyIn89 :: (([Name L],Maybe L)) -> (HappyAbsSyn ) +happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn89 #-} +happyOut89 :: (HappyAbsSyn ) -> (([Name L],Maybe L)) +happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut89 #-} +happyIn90 :: (([Name L],L)) -> (HappyAbsSyn ) +happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn90 #-} +happyOut90 :: (HappyAbsSyn ) -> (([Name L],L)) +happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut90 #-} +happyIn91 :: (([FunDep L],[S],Maybe L)) -> (HappyAbsSyn ) +happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn91 #-} +happyOut91 :: (HappyAbsSyn ) -> (([FunDep L],[S],Maybe L)) +happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut91 #-} +happyIn92 :: (([FunDep L],[S],L)) -> (HappyAbsSyn ) +happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn92 #-} +happyOut92 :: (HappyAbsSyn ) -> (([FunDep L],[S],L)) +happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut92 #-} +happyIn93 :: (FunDep L) -> (HappyAbsSyn ) +happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn93 #-} +happyOut93 :: (HappyAbsSyn ) -> (FunDep L) +happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut93 #-} +happyIn94 :: (([GadtDecl L],[S],L,Bool)) -> (HappyAbsSyn ) +happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn94 #-} +happyOut94 :: (HappyAbsSyn ) -> (([GadtDecl L],[S],L,Bool)) +happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut94 #-} +happyIn95 :: (([GadtDecl L],[S],L,Bool)) -> (HappyAbsSyn ) +happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn95 #-} +happyOut95 :: (HappyAbsSyn ) -> (([GadtDecl L],[S],L,Bool)) +happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut95 #-} +happyIn96 :: (([GadtDecl L],[S])) -> (HappyAbsSyn ) +happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn96 #-} +happyOut96 :: (HappyAbsSyn ) -> (([GadtDecl L],[S])) +happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut96 #-} +happyIn97 :: (([GadtDecl L],[S])) -> (HappyAbsSyn ) +happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn97 #-} +happyOut97 :: (HappyAbsSyn ) -> (([GadtDecl L],[S])) +happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut97 #-} +happyIn98 :: (GadtDecl L) -> (HappyAbsSyn ) +happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn98 #-} +happyOut98 :: (HappyAbsSyn ) -> (GadtDecl L) +happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut98 #-} +happyIn99 :: (([QualConDecl L],[S],Maybe L)) -> (HappyAbsSyn ) +happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn99 #-} +happyOut99 :: (HappyAbsSyn ) -> (([QualConDecl L],[S],Maybe L)) +happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut99 #-} +happyIn100 :: (([QualConDecl L],[S],L)) -> (HappyAbsSyn ) +happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn100 #-} +happyOut100 :: (HappyAbsSyn ) -> (([QualConDecl L],[S],L)) +happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut100 #-} +happyIn101 :: (QualConDecl L) -> (HappyAbsSyn ) +happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn101 #-} +happyOut101 :: (HappyAbsSyn ) -> (QualConDecl L) +happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut101 #-} +happyIn102 :: ((Maybe [TyVarBind L], [S], Maybe L)) -> (HappyAbsSyn ) +happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn102 #-} +happyOut102 :: (HappyAbsSyn ) -> ((Maybe [TyVarBind L], [S], Maybe L)) +happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut102 #-} +happyIn103 :: (ConDecl L) -> (HappyAbsSyn ) +happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn103 #-} +happyOut103 :: (HappyAbsSyn ) -> (ConDecl L) +happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut103 #-} +happyIn104 :: ((Name L, [BangType L], L)) -> (HappyAbsSyn ) +happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn104 #-} +happyOut104 :: (HappyAbsSyn ) -> ((Name L, [BangType L], L)) +happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut104 #-} +happyIn105 :: ((Name L, [BangType L],L)) -> (HappyAbsSyn ) +happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn105 #-} +happyOut105 :: (HappyAbsSyn ) -> ((Name L, [BangType L],L)) +happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut105 #-} +happyIn106 :: (BangType L) -> (HappyAbsSyn ) +happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn106 #-} +happyOut106 :: (HappyAbsSyn ) -> (BangType L) +happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut106 #-} +happyIn107 :: (BangType L) -> (HappyAbsSyn ) +happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn107 #-} +happyOut107 :: (HappyAbsSyn ) -> (BangType L) +happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut107 #-} +happyIn108 :: (([FieldDecl L],[S])) -> (HappyAbsSyn ) +happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn108 #-} +happyOut108 :: (HappyAbsSyn ) -> (([FieldDecl L],[S])) +happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut108 #-} +happyIn109 :: (FieldDecl L) -> (HappyAbsSyn ) +happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn109 #-} +happyOut109 :: (HappyAbsSyn ) -> (FieldDecl L) +happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut109 #-} +happyIn110 :: (BangType L) -> (HappyAbsSyn ) +happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn110 #-} +happyOut110 :: (HappyAbsSyn ) -> (BangType L) +happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut110 #-} +happyIn111 :: ((Maybe [Deriving L],[S],Maybe L)) -> (HappyAbsSyn ) +happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn111 #-} +happyOut111 :: (HappyAbsSyn ) -> ((Maybe [Deriving L],[S],Maybe L)) +happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut111 #-} +happyIn112 :: (([Deriving L],[S])) -> (HappyAbsSyn ) +happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn112 #-} +happyOut112 :: (HappyAbsSyn ) -> (([Deriving L],[S])) +happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut112 #-} +happyIn113 :: (QName L) -> (HappyAbsSyn ) +happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn113 #-} +happyOut113 :: (HappyAbsSyn ) -> (QName L) +happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut113 #-} +happyIn114 :: (Kind L) -> (HappyAbsSyn ) +happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn114 #-} +happyOut114 :: (HappyAbsSyn ) -> (Kind L) +happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut114 #-} +happyIn115 :: (Kind L) -> (HappyAbsSyn ) +happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn115 #-} +happyOut115 :: (HappyAbsSyn ) -> (Kind L) +happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut115 #-} +happyIn116 :: (Kind L) -> (HappyAbsSyn ) +happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn116 #-} +happyOut116 :: (HappyAbsSyn ) -> (Kind L) +happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut116 #-} +happyIn117 :: ((Maybe (Kind L), [S])) -> (HappyAbsSyn ) +happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn117 #-} +happyOut117 :: (HappyAbsSyn ) -> ((Maybe (Kind L), [S])) +happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut117 #-} +happyIn118 :: ((Maybe [ClassDecl L],[S],Maybe L,Bool)) -> (HappyAbsSyn ) +happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn118 #-} +happyOut118 :: (HappyAbsSyn ) -> ((Maybe [ClassDecl L],[S],Maybe L,Bool)) +happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut118 #-} +happyIn119 :: (([ClassDecl L],[S])) -> (HappyAbsSyn ) +happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn119 #-} +happyOut119 :: (HappyAbsSyn ) -> (([ClassDecl L],[S])) +happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut119 #-} +happyIn120 :: (([ClassDecl L],[S])) -> (HappyAbsSyn ) +happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn120 #-} +happyOut120 :: (HappyAbsSyn ) -> (([ClassDecl L],[S])) +happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut120 #-} +happyIn121 :: (ClassDecl L) -> (HappyAbsSyn ) +happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn121 #-} +happyOut121 :: (HappyAbsSyn ) -> (ClassDecl L) +happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut121 #-} +happyIn122 :: (ClassDecl L) -> (HappyAbsSyn ) +happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn122 #-} +happyOut122 :: (HappyAbsSyn ) -> (ClassDecl L) +happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut122 #-} +happyIn123 :: ((Maybe [InstDecl L],[S],Maybe L,Bool)) -> (HappyAbsSyn ) +happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn123 #-} +happyOut123 :: (HappyAbsSyn ) -> ((Maybe [InstDecl L],[S],Maybe L,Bool)) +happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut123 #-} +happyIn124 :: (([InstDecl L],[S])) -> (HappyAbsSyn ) +happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn124 #-} +happyOut124 :: (HappyAbsSyn ) -> (([InstDecl L],[S])) +happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut124 #-} +happyIn125 :: (([InstDecl L],[S])) -> (HappyAbsSyn ) +happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn125 #-} +happyOut125 :: (HappyAbsSyn ) -> (([InstDecl L],[S])) +happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut125 #-} +happyIn126 :: (InstDecl L) -> (HappyAbsSyn ) +happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn126 #-} +happyOut126 :: (HappyAbsSyn ) -> (InstDecl L) +happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut126 #-} +happyIn127 :: (InstDecl L) -> (HappyAbsSyn ) +happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn127 #-} +happyOut127 :: (HappyAbsSyn ) -> (InstDecl L) +happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut127 #-} +happyIn128 :: (InstDecl L) -> (HappyAbsSyn ) +happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn128 #-} +happyOut128 :: (HappyAbsSyn ) -> (InstDecl L) +happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut128 #-} +happyIn129 :: (Decl L) -> (HappyAbsSyn ) +happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn129 #-} +happyOut129 :: (HappyAbsSyn ) -> (Decl L) +happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut129 #-} +happyIn130 :: ((Maybe (Binds L),[S])) -> (HappyAbsSyn ) +happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn130 #-} +happyOut130 :: (HappyAbsSyn ) -> ((Maybe (Binds L),[S])) +happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut130 #-} +happyIn131 :: ((Maybe (Type L),[S])) -> (HappyAbsSyn ) +happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn131 #-} +happyOut131 :: (HappyAbsSyn ) -> ((Maybe (Type L),[S])) +happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut131 #-} +happyIn132 :: (Rhs L) -> (HappyAbsSyn ) +happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn132 #-} +happyOut132 :: (HappyAbsSyn ) -> (Rhs L) +happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut132 #-} +happyIn133 :: (([GuardedRhs L],L)) -> (HappyAbsSyn ) +happyIn133 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn133 #-} +happyOut133 :: (HappyAbsSyn ) -> (([GuardedRhs L],L)) +happyOut133 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut133 #-} +happyIn134 :: (GuardedRhs L) -> (HappyAbsSyn ) +happyIn134 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn134 #-} +happyOut134 :: (HappyAbsSyn ) -> (GuardedRhs L) +happyOut134 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut134 #-} +happyIn135 :: (Exp L) -> (HappyAbsSyn ) +happyIn135 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn135 #-} +happyOut135 :: (HappyAbsSyn ) -> (Exp L) +happyOut135 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut135 #-} +happyIn136 :: (PExp L) -> (HappyAbsSyn ) +happyIn136 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn136 #-} +happyOut136 :: (HappyAbsSyn ) -> (PExp L) +happyOut136 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut136 #-} +happyIn137 :: (PExp L) -> (HappyAbsSyn ) +happyIn137 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn137 #-} +happyOut137 :: (HappyAbsSyn ) -> (PExp L) +happyOut137 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut137 #-} +happyIn138 :: (PExp L) -> (HappyAbsSyn ) +happyIn138 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn138 #-} +happyOut138 :: (HappyAbsSyn ) -> (PExp L) +happyOut138 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut138 #-} +happyIn139 :: (PExp L) -> (HappyAbsSyn ) +happyIn139 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn139 #-} +happyOut139 :: (HappyAbsSyn ) -> (PExp L) +happyOut139 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut139 #-} +happyIn140 :: (PExp L) -> (HappyAbsSyn ) +happyIn140 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn140 #-} +happyOut140 :: (HappyAbsSyn ) -> (PExp L) +happyOut140 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut140 #-} +happyIn141 :: (PExp L) -> (HappyAbsSyn ) +happyIn141 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn141 #-} +happyOut141 :: (HappyAbsSyn ) -> (PExp L) +happyOut141 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut141 #-} +happyIn142 :: (PExp L) -> (HappyAbsSyn ) +happyIn142 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn142 #-} +happyOut142 :: (HappyAbsSyn ) -> (PExp L) +happyOut142 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut142 #-} +happyIn143 :: (PExp L) -> (HappyAbsSyn ) +happyIn143 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn143 #-} +happyOut143 :: (HappyAbsSyn ) -> (PExp L) +happyOut143 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut143 #-} +happyIn144 :: ([Pat L]) -> (HappyAbsSyn ) +happyIn144 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn144 #-} +happyOut144 :: (HappyAbsSyn ) -> ([Pat L]) +happyOut144 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut144 #-} +happyIn145 :: (Pat L) -> (HappyAbsSyn ) +happyIn145 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn145 #-} +happyOut145 :: (HappyAbsSyn ) -> (Pat L) +happyOut145 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut145 #-} +happyIn146 :: (PExp L) -> (HappyAbsSyn ) +happyIn146 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn146 #-} +happyOut146 :: (HappyAbsSyn ) -> (PExp L) +happyOut146 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut146 #-} +happyIn147 :: (PExp L) -> (HappyAbsSyn ) +happyIn147 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn147 #-} +happyOut147 :: (HappyAbsSyn ) -> (PExp L) +happyOut147 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut147 #-} +happyIn148 :: (PExp L) -> (HappyAbsSyn ) +happyIn148 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn148 #-} +happyOut148 :: (HappyAbsSyn ) -> (PExp L) +happyOut148 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut148 #-} +happyIn149 :: ([S]) -> (HappyAbsSyn ) +happyIn149 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn149 #-} +happyOut149 :: (HappyAbsSyn ) -> ([S]) +happyOut149 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut149 #-} +happyIn150 :: (PExp L) -> (HappyAbsSyn ) +happyIn150 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn150 #-} +happyOut150 :: (HappyAbsSyn ) -> (PExp L) +happyOut150 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut150 #-} +happyIn151 :: (([Maybe (PExp L)],[S])) -> (HappyAbsSyn ) +happyIn151 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn151 #-} +happyOut151 :: (HappyAbsSyn ) -> (([Maybe (PExp L)],[S])) +happyOut151 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut151 #-} +happyIn152 :: (([PExp L],[S])) -> (HappyAbsSyn ) +happyIn152 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn152 #-} +happyOut152 :: (HappyAbsSyn ) -> (([PExp L],[S])) +happyOut152 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut152 #-} +happyIn153 :: (PExp L) -> (HappyAbsSyn ) +happyIn153 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn153 #-} +happyOut153 :: (HappyAbsSyn ) -> (PExp L) +happyOut153 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut153 #-} +happyIn154 :: (PExp L) -> (HappyAbsSyn ) +happyIn154 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn154 #-} +happyOut154 :: (HappyAbsSyn ) -> (PExp L) +happyOut154 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut154 #-} +happyIn155 :: ([PExp L]) -> (HappyAbsSyn ) +happyIn155 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn155 #-} +happyOut155 :: (HappyAbsSyn ) -> ([PExp L]) +happyOut155 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut155 #-} +happyIn156 :: (PExp L) -> (HappyAbsSyn ) +happyIn156 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn156 #-} +happyOut156 :: (HappyAbsSyn ) -> (PExp L) +happyOut156 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut156 #-} +happyIn157 :: (XName L) -> (HappyAbsSyn ) +happyIn157 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn157 #-} +happyOut157 :: (HappyAbsSyn ) -> (XName L) +happyOut157 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut157 #-} +happyIn158 :: (Loc String) -> (HappyAbsSyn ) +happyIn158 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn158 #-} +happyOut158 :: (HappyAbsSyn ) -> (Loc String) +happyOut158 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut158 #-} +happyIn159 :: (Loc String) -> (HappyAbsSyn ) +happyIn159 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn159 #-} +happyOut159 :: (HappyAbsSyn ) -> (Loc String) +happyOut159 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut159 #-} +happyIn160 :: ([ParseXAttr L]) -> (HappyAbsSyn ) +happyIn160 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn160 #-} +happyOut160 :: (HappyAbsSyn ) -> ([ParseXAttr L]) +happyOut160 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut160 #-} +happyIn161 :: (ParseXAttr L) -> (HappyAbsSyn ) +happyIn161 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn161 #-} +happyOut161 :: (HappyAbsSyn ) -> (ParseXAttr L) +happyOut161 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut161 #-} +happyIn162 :: (Maybe (PExp L)) -> (HappyAbsSyn ) +happyIn162 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn162 #-} +happyOut162 :: (HappyAbsSyn ) -> (Maybe (PExp L)) +happyOut162 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut162 #-} +happyIn163 :: (L -> PExp L) -> (HappyAbsSyn ) +happyIn163 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn163 #-} +happyOut163 :: (HappyAbsSyn ) -> (L -> PExp L) +happyOut163 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut163 #-} +happyIn164 :: (([PExp L],[S])) -> (HappyAbsSyn ) +happyIn164 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn164 #-} +happyOut164 :: (HappyAbsSyn ) -> (([PExp L],[S])) +happyOut164 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut164 #-} +happyIn165 :: (([[QualStmt L]],[S])) -> (HappyAbsSyn ) +happyIn165 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn165 #-} +happyOut165 :: (HappyAbsSyn ) -> (([[QualStmt L]],[S])) +happyOut165 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut165 #-} +happyIn166 :: (([QualStmt L],[S])) -> (HappyAbsSyn ) +happyIn166 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn166 #-} +happyOut166 :: (HappyAbsSyn ) -> (([QualStmt L],[S])) +happyOut166 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut166 #-} +happyIn167 :: (QualStmt L) -> (HappyAbsSyn ) +happyIn167 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn167 #-} +happyOut167 :: (HappyAbsSyn ) -> (QualStmt L) +happyOut167 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut167 #-} +happyIn168 :: (QualStmt L) -> (HappyAbsSyn ) +happyIn168 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn168 #-} +happyOut168 :: (HappyAbsSyn ) -> (QualStmt L) +happyOut168 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut168 #-} +happyIn169 :: (([Stmt L],[S])) -> (HappyAbsSyn ) +happyIn169 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn169 #-} +happyOut169 :: (HappyAbsSyn ) -> (([Stmt L],[S])) +happyOut169 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut169 #-} +happyIn170 :: (Stmt L) -> (HappyAbsSyn ) +happyIn170 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn170 #-} +happyOut170 :: (HappyAbsSyn ) -> (Stmt L) +happyOut170 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut170 #-} +happyIn171 :: (([Alt L],L,[S],Bool)) -> (HappyAbsSyn ) +happyIn171 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn171 #-} +happyOut171 :: (HappyAbsSyn ) -> (([Alt L],L,[S],Bool)) +happyOut171 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut171 #-} +happyIn172 :: (([Alt L],[S])) -> (HappyAbsSyn ) +happyIn172 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn172 #-} +happyOut172 :: (HappyAbsSyn ) -> (([Alt L],[S])) +happyOut172 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut172 #-} +happyIn173 :: (([Alt L],[S])) -> (HappyAbsSyn ) +happyIn173 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn173 #-} +happyOut173 :: (HappyAbsSyn ) -> (([Alt L],[S])) +happyOut173 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut173 #-} +happyIn174 :: (Alt L) -> (HappyAbsSyn ) +happyIn174 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn174 #-} +happyOut174 :: (HappyAbsSyn ) -> (Alt L) +happyOut174 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut174 #-} +happyIn175 :: (GuardedAlts L) -> (HappyAbsSyn ) +happyIn175 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn175 #-} +happyOut175 :: (HappyAbsSyn ) -> (GuardedAlts L) +happyOut175 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut175 #-} +happyIn176 :: (([GuardedAlt L],L)) -> (HappyAbsSyn ) +happyIn176 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn176 #-} +happyOut176 :: (HappyAbsSyn ) -> (([GuardedAlt L],L)) +happyOut176 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut176 #-} +happyIn177 :: (GuardedAlt L) -> (HappyAbsSyn ) +happyIn177 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn177 #-} +happyOut177 :: (HappyAbsSyn ) -> (GuardedAlt L) +happyOut177 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut177 #-} +happyIn178 :: (Pat L) -> (HappyAbsSyn ) +happyIn178 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn178 #-} +happyOut178 :: (HappyAbsSyn ) -> (Pat L) +happyOut178 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut178 #-} +happyIn179 :: (([Stmt L],L,[S],Bool)) -> (HappyAbsSyn ) +happyIn179 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn179 #-} +happyOut179 :: (HappyAbsSyn ) -> (([Stmt L],L,[S],Bool)) +happyOut179 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut179 #-} +happyIn180 :: (([Stmt L],[S])) -> (HappyAbsSyn ) +happyIn180 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn180 #-} +happyOut180 :: (HappyAbsSyn ) -> (([Stmt L],[S])) +happyOut180 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut180 #-} +happyIn181 :: (([Stmt L],[S])) -> (HappyAbsSyn ) +happyIn181 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn181 #-} +happyOut181 :: (HappyAbsSyn ) -> (([Stmt L],[S])) +happyOut181 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut181 #-} +happyIn182 :: (Stmt L) -> (HappyAbsSyn ) +happyIn182 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn182 #-} +happyOut182 :: (HappyAbsSyn ) -> (Stmt L) +happyOut182 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut182 #-} +happyIn183 :: (([PFieldUpdate L],[S])) -> (HappyAbsSyn ) +happyIn183 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn183 #-} +happyOut183 :: (HappyAbsSyn ) -> (([PFieldUpdate L],[S])) +happyOut183 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut183 #-} +happyIn184 :: (PFieldUpdate L) -> (HappyAbsSyn ) +happyIn184 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn184 #-} +happyOut184 :: (HappyAbsSyn ) -> (PFieldUpdate L) +happyOut184 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut184 #-} +happyIn185 :: (([IPBind L],[S])) -> (HappyAbsSyn ) +happyIn185 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn185 #-} +happyOut185 :: (HappyAbsSyn ) -> (([IPBind L],[S])) +happyOut185 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut185 #-} +happyIn186 :: (([IPBind L],[S])) -> (HappyAbsSyn ) +happyIn186 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn186 #-} +happyOut186 :: (HappyAbsSyn ) -> (([IPBind L],[S])) +happyOut186 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut186 #-} +happyIn187 :: (IPBind L) -> (HappyAbsSyn ) +happyIn187 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn187 #-} +happyOut187 :: (HappyAbsSyn ) -> (IPBind L) +happyOut187 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut187 #-} +happyIn188 :: (PExp L) -> (HappyAbsSyn ) +happyIn188 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn188 #-} +happyOut188 :: (HappyAbsSyn ) -> (PExp L) +happyOut188 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut188 #-} +happyIn189 :: (Name L) -> (HappyAbsSyn ) +happyIn189 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn189 #-} +happyOut189 :: (HappyAbsSyn ) -> (Name L) +happyOut189 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut189 #-} +happyIn190 :: (Name L) -> (HappyAbsSyn ) +happyIn190 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn190 #-} +happyOut190 :: (HappyAbsSyn ) -> (Name L) +happyOut190 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut190 #-} +happyIn191 :: (QName L) -> (HappyAbsSyn ) +happyIn191 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn191 #-} +happyOut191 :: (HappyAbsSyn ) -> (QName L) +happyOut191 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut191 #-} +happyIn192 :: (IPName L) -> (HappyAbsSyn ) +happyIn192 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn192 #-} +happyOut192 :: (HappyAbsSyn ) -> (IPName L) +happyOut192 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut192 #-} +happyIn193 :: (Name L) -> (HappyAbsSyn ) +happyIn193 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn193 #-} +happyOut193 :: (HappyAbsSyn ) -> (Name L) +happyOut193 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut193 #-} +happyIn194 :: (QName L) -> (HappyAbsSyn ) +happyIn194 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn194 #-} +happyOut194 :: (HappyAbsSyn ) -> (QName L) +happyOut194 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut194 #-} +happyIn195 :: (Name L) -> (HappyAbsSyn ) +happyIn195 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn195 #-} +happyOut195 :: (HappyAbsSyn ) -> (Name L) +happyOut195 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut195 #-} +happyIn196 :: (QName L) -> (HappyAbsSyn ) +happyIn196 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn196 #-} +happyOut196 :: (HappyAbsSyn ) -> (QName L) +happyOut196 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut196 #-} +happyIn197 :: (QName L) -> (HappyAbsSyn ) +happyIn197 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn197 #-} +happyOut197 :: (HappyAbsSyn ) -> (QName L) +happyOut197 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut197 #-} +happyIn198 :: (Name L) -> (HappyAbsSyn ) +happyIn198 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn198 #-} +happyOut198 :: (HappyAbsSyn ) -> (Name L) +happyOut198 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut198 #-} +happyIn199 :: (QName L) -> (HappyAbsSyn ) +happyIn199 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn199 #-} +happyOut199 :: (HappyAbsSyn ) -> (QName L) +happyOut199 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut199 #-} +happyIn200 :: (Op L) -> (HappyAbsSyn ) +happyIn200 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn200 #-} +happyOut200 :: (HappyAbsSyn ) -> (Op L) +happyOut200 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut200 #-} +happyIn201 :: (QOp L) -> (HappyAbsSyn ) +happyIn201 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn201 #-} +happyOut201 :: (HappyAbsSyn ) -> (QOp L) +happyOut201 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut201 #-} +happyIn202 :: (QOp L) -> (HappyAbsSyn ) +happyIn202 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn202 #-} +happyOut202 :: (HappyAbsSyn ) -> (QOp L) +happyOut202 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut202 #-} +happyIn203 :: (QName L) -> (HappyAbsSyn ) +happyIn203 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn203 #-} +happyOut203 :: (HappyAbsSyn ) -> (QName L) +happyOut203 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut203 #-} +happyIn204 :: (QName L) -> (HappyAbsSyn ) +happyIn204 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn204 #-} +happyOut204 :: (HappyAbsSyn ) -> (QName L) +happyOut204 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut204 #-} +happyIn205 :: (Name L) -> (HappyAbsSyn ) +happyIn205 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn205 #-} +happyOut205 :: (HappyAbsSyn ) -> (Name L) +happyOut205 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut205 #-} +happyIn206 :: (Name L) -> (HappyAbsSyn ) +happyIn206 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn206 #-} +happyOut206 :: (HappyAbsSyn ) -> (Name L) +happyOut206 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut206 #-} +happyIn207 :: (IPName L) -> (HappyAbsSyn ) +happyIn207 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn207 #-} +happyOut207 :: (HappyAbsSyn ) -> (IPName L) +happyOut207 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut207 #-} +happyIn208 :: (QName L) -> (HappyAbsSyn ) +happyIn208 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn208 #-} +happyOut208 :: (HappyAbsSyn ) -> (QName L) +happyOut208 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut208 #-} +happyIn209 :: (Name L) -> (HappyAbsSyn ) +happyIn209 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn209 #-} +happyOut209 :: (HappyAbsSyn ) -> (Name L) +happyOut209 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut209 #-} +happyIn210 :: (QName L) -> (HappyAbsSyn ) +happyIn210 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn210 #-} +happyOut210 :: (HappyAbsSyn ) -> (QName L) +happyOut210 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut210 #-} +happyIn211 :: (Name L) -> (HappyAbsSyn ) +happyIn211 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn211 #-} +happyOut211 :: (HappyAbsSyn ) -> (Name L) +happyOut211 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut211 #-} +happyIn212 :: (QName L) -> (HappyAbsSyn ) +happyIn212 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn212 #-} +happyOut212 :: (HappyAbsSyn ) -> (QName L) +happyOut212 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut212 #-} +happyIn213 :: (QName L) -> (HappyAbsSyn ) +happyIn213 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn213 #-} +happyOut213 :: (HappyAbsSyn ) -> (QName L) +happyOut213 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut213 #-} +happyIn214 :: (Name L) -> (HappyAbsSyn ) +happyIn214 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn214 #-} +happyOut214 :: (HappyAbsSyn ) -> (Name L) +happyOut214 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut214 #-} +happyIn215 :: (Name L) -> (HappyAbsSyn ) +happyIn215 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn215 #-} +happyOut215 :: (HappyAbsSyn ) -> (Name L) +happyOut215 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut215 #-} +happyIn216 :: (QName L) -> (HappyAbsSyn ) +happyIn216 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn216 #-} +happyOut216 :: (HappyAbsSyn ) -> (QName L) +happyOut216 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut216 #-} +happyIn217 :: (Literal L) -> (HappyAbsSyn ) +happyIn217 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn217 #-} +happyOut217 :: (HappyAbsSyn ) -> (Literal L) +happyOut217 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut217 #-} +happyIn218 :: (S) -> (HappyAbsSyn ) +happyIn218 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn218 #-} +happyOut218 :: (HappyAbsSyn ) -> (S) +happyOut218 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut218 #-} +happyIn219 :: (S) -> (HappyAbsSyn ) +happyIn219 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn219 #-} +happyOut219 :: (HappyAbsSyn ) -> (S) +happyOut219 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut219 #-} +happyIn220 :: (ModuleName L) -> (HappyAbsSyn ) +happyIn220 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn220 #-} +happyOut220 :: (HappyAbsSyn ) -> (ModuleName L) +happyOut220 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut220 #-} +happyIn221 :: (Name L) -> (HappyAbsSyn ) +happyIn221 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn221 #-} +happyOut221 :: (HappyAbsSyn ) -> (Name L) +happyOut221 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut221 #-} +happyIn222 :: (QName L) -> (HappyAbsSyn ) +happyIn222 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn222 #-} +happyOut222 :: (HappyAbsSyn ) -> (QName L) +happyOut222 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut222 #-} +happyIn223 :: (Name L) -> (HappyAbsSyn ) +happyIn223 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn223 #-} +happyOut223 :: (HappyAbsSyn ) -> (Name L) +happyOut223 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut223 #-} +happyIn224 :: (QName L) -> (HappyAbsSyn ) +happyIn224 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn224 #-} +happyOut224 :: (HappyAbsSyn ) -> (QName L) +happyOut224 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut224 #-} +happyIn225 :: (Name L) -> (HappyAbsSyn ) +happyIn225 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyIn225 #-} +happyOut225 :: (HappyAbsSyn ) -> (Name L) +happyOut225 x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOut225 #-} +happyInTok :: (Loc Token) -> (HappyAbsSyn ) +happyInTok x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyInTok #-} +happyOutTok :: (HappyAbsSyn ) -> (Loc Token) +happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x +{-# INLINE happyOutTok #-} + + +happyActOffsets :: HappyAddr +happyActOffsets = HappyA# "\x00\x00\x3d\x11\xc1\x10\x73\x0a\xc2\x19\x00\x00\x00\x00\xbd\x07\x5f\x02\x02\x08\x00\x00\x00\x00\xea\x18\x00\x00\x00\x00\x00\x00\x73\x07\x00\x00\xc1\x07\xcc\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x18\x42\x19\x92\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x07\x71\x07\x82\x19\x00\x00\x00\x00\x00\x00\xbb\x18\x00\x00\x5f\x18\x00\x00\xd6\x07\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x0b\xbd\x01\x65\x0c\x00\x00\x5f\x18\x5f\x18\x5f\x18\x3d\x11\x00\x00\x3d\x11\x3d\x11\x3d\x11\xaa\x19\x00\x00\x0b\x1b\xda\x1a\x00\x00\xeb\x17\x3d\x11\x13\x00\x3d\x11\xaa\x19\x92\x07\xd8\x07\x82\x07\xc9\x07\x00\x00\x00\x00\x00\x00\xaa\x19\xc9\x07\x00\x00\x02\x1a\xc4\x07\xe1\x1a\xc4\x07\xd4\x07\x66\x1b\x66\x1b\x00\x00\x00\x00\x00\x00\x07\x1c\x00\x00\x00\x00\x68\x07\xf3\x15\xc4\x17\x3d\x11\x3d\x11\xc5\x07\xf3\x15\xd2\x07\xd1\x07\xcf\x07\x5a\x07\x00\x00\x5a\x07\x11\x00\x00\x00\x00\x00\xbb\x07\x50\x17\x67\x07\x32\x05\xc3\x07\x58\x07\x56\x07\xa4\x07\x00\x00\x29\x17\x00\x00\x6c\x07\x00\x00\x00\x00\x5e\x07\xb5\x07\x00\x00\x9d\x15\x00\x00\x00\x00\x00\x00\x3d\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\xaa\x19\x00\x00\x00\x00\x00\x00\x3d\x11\x3d\x11\x3d\x11\x3d\x11\x61\x00\x00\x00\xbc\x07\xa3\x07\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x04\x5f\x00\x24\x00\x00\x00\xa2\x07\x52\x1b\x3f\x00\x99\x07\x04\x02\xaa\x19\x52\x1b\x96\x07\x2a\x19\xea\x19\xb4\x1a\x00\x00\x5d\x0d\x5d\x0d\x4b\x07\x00\x00\xaa\x19\xaa\x19\xaa\x19\x90\x07\x4f\x07\xcf\x04\xcf\x04\x6f\x07\x00\x00\x91\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x07\xa0\x01\x87\x07\x00\x00\x00\x00\x7e\x03\x73\x0a\x66\x07\x61\x07\x5d\x1a\x54\x07\x7d\x07\x75\x07\x47\x00\x9d\x04\x29\x17\x00\x00\x62\x07\xd1\x01\x64\x07\x6b\x07\x00\x00\x00\x00\x3d\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\x00\x00\x00\x00\x00\x00\x9e\x01\x00\x00\x00\x00\x8a\x04\x6d\x0b\x8e\x01\x6a\x07\x69\x07\x63\x07\x5d\x07\x5c\x07\x00\x00\x59\x07\x29\x17\x55\x07\x4e\x07\xea\x19\x29\x17\x29\x17\xc9\x13\x00\x00\x59\x04\x33\x15\x52\x1b\xaa\x19\x2c\x00\xaa\x19\xeb\x08\x00\x00\x06\x12\x3e\x07\x00\x00\x00\x00\x40\x01\xdc\x00\x00\x00\x3e\x01\x46\x07\x3a\x07\x89\x01\x44\x07\x00\x00\x34\x07\xb4\x1a\xaa\x19\x00\x00\xb4\x1a\x00\x00\xb4\x1a\x00\x00\x00\x00\x3e\x1b\xaa\x19\xb4\x1a\x50\x00\x2e\x07\x00\x00\x00\x00\x00\x00\x43\x07\x00\x00\x0c\x07\x00\x00\x23\x00\x21\x00\x1d\x00\x5f\x02\x00\x00\x00\x00\x00\x00\x57\x1a\x00\x00\x23\x07\x11\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x19\x00\x00\x00\x00\x2b\x01\x00\x00\x00\x00\xaa\x19\x00\x00\x00\x00\x00\x00\xaa\x18\xaa\x19\x0a\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x1b\x2c\x00\xc5\x06\xac\x06\x2b\x01\xbc\x06\xe4\x02\x81\x01\x00\x00\x00\x00\x9a\x06\xee\x06\x00\x00\x3d\x11\x45\x10\xd8\x01\x00\x00\xe3\x06\x00\x00\x00\x00\x00\x00\x00\x00\xeb\x06\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x0a\x00\x00\x00\x00\x5c\x01\x00\x00\x3d\x11\x3d\x11\x00\x00\xe4\x06\x00\x00\xe1\x0c\x00\x00\xe1\x0c\x3d\x11\x55\x0e\x87\x06\x3d\x11\x00\x00\x45\x10\xdd\x14\x00\x00\x3d\x11\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\xe2\x06\xb5\x16\x69\x14\x00\x00\x07\x07\x00\x00\x00\x00\x4f\x09\xd6\x06\x82\x06\x00\x00\xc2\x06\xce\x06\x00\x00\xbe\x06\x00\x00\x00\x00\x00\x00\xbf\x06\x00\x00\xbd\x06\xb8\x06\xba\x06\xb9\x06\x5d\x0d\xb4\x06\xaf\x06\x50\x00\xa1\x06\x00\x00\x99\x06\xb4\x1a\xaa\x19\x4c\x06\x44\x06\xaa\x19\x9f\x06\xb0\x06\x93\x06\x58\x06\xa4\x06\x00\x00\x37\x1b\x00\x00\x92\x06\x91\x06\x37\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x06\x00\x00\x00\x00\x3d\x11\x00\x00\x3d\x11\xa7\x12\x84\x06\x78\x06\x50\x00\x50\x00\x3d\x11\x00\x00\x3d\x11\x3d\x11\x3d\x11\x6a\x06\x5c\x04\x00\x00\x00\x00\x4a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x71\x06\x77\x09\x50\x00\x69\x14\x3d\x06\x6c\x06\x6f\x06\x6d\x06\x64\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x06\x00\x00\x0e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x11\x83\x1b\xaa\x19\x48\x06\x00\x00\xdc\x05\x3c\x06\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x1a\x00\x00\xaa\x19\x00\x00\x00\x00\xf9\x05\x00\x00\x00\x00\x5d\x0d\x00\x00\x3d\x11\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x18\x28\x06\x31\x06\x00\x00\x00\x00\x35\x06\x00\x00\x00\x00\x00\x00\x00\x00\x24\x06\x00\x00\x46\x0b\x1a\x01\x4f\x09\x00\x00\x00\x00\x00\x00\x00\x00\x22\x06\x00\x00\x87\x04\x53\x04\x4d\x04\x1e\x04\xef\x03\xc5\x03\x8b\x03\x26\x03\x22\x03\x11\x03\x09\x03\xe9\x02\x00\x00\x73\x0a\x2b\x06\x05\x06\x00\x00\x31\x00\x00\x00\x16\x06\x1a\x06\x00\x00\x00\x00\x1a\x06\x13\x06\x0f\x06\x00\x00\x00\x00\x00\x00\xc9\x0f\x00\x00\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x06\x00\x00\x00\x00\x00\x00\x45\x01\x00\x00\x00\x00\x3d\x11\x00\x00\x7c\x12\x3b\x00\x00\x00\x00\x00\x00\x00\x6d\x1b\xaa\x19\x07\x06\x00\x00\x21\x09\x00\x00\x00\x00\x00\x00\x00\x06\x2b\x01\x00\x00\x00\x00\x0c\x06\x00\x00\xfe\x01\xc7\x05\xa7\x05\x01\x06\xfa\x05\xeb\x08\x00\x00\xf0\x05\x00\x00\xff\x05\xf2\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x06\x0b\x00\x00\x00\x00\x00\x00\x00\x2b\x01\x00\x00\x00\x00\x00\x00\xf6\x05\x00\x00\x00\x00\x00\x00\x6a\x19\xac\x05\x00\x00\x00\x00\x00\x00\xee\x05\x2b\x01\xf5\x08\x00\x00\x2e\x08\xd3\x05\x00\x00\x00\x00\xe1\x08\x53\x00\xdb\x05\xd7\x05\xb4\x18\xb4\x1a\x6e\x05\x86\x05\x00\x00\x00\x00\x1a\x01\x4d\x0f\x3d\x11\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x11\x8b\x05\x08\x00\x55\x0e\x55\x0e\x00\x00\x7b\x05\x3d\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x16\x00\x00\xc2\x05\xae\x05\xb4\x1a\xd9\x0d\xb3\x05\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x18\x7f\x13\xa4\x05\x50\x00\x00\x00\x00\x00\x00\x00\xaa\x19\x00\x00\x00\x00\x49\x05\xa6\x05\xeb\x12\x00\x00\x33\x01\x93\x05\x3d\x11\x3d\x11\x55\x04\x9c\x05\x13\x13\x9c\x05\x83\x05\x45\x05\x3d\x05\x38\x05\x00\x00\x2a\x1a\x00\x00\xa9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x35\x05\x00\x00\x36\x05\x1c\x05\xf5\x09\x7d\x05\x00\x00\x00\x00\x88\x05\x70\x05\x00\x00\x00\x00\x00\x00\x79\x05\x00\x00\xb8\x04\x00\x00\x00\x00\x00\x00\x82\x05\x00\x00\x00\x00\x58\x05\x00\x00\x00\x00\x3d\x11\x64\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x1a\x00\x00\xb4\x1a\x5d\x05\x00\x00\x00\x00\xb9\x11\x6d\x05\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\x02\x00\x00\xb4\x1a\x00\x00\x00\x00\x4e\x03\x00\x00\x59\x05\x00\x00\x3d\x11\x3d\x11\x3d\x11\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x05\x00\x00\x00\x00\x53\x05\x3e\x14\xda\x08\x63\x05\x00\x00\x00\x00\xb4\x1a\xdb\x04\x9a\x08\xb4\x1a\xb4\x1a\xd3\x04\x00\x00\x00\x00\x00\x00\x29\x02\x34\x05\x50\x00\x00\x00\x33\x05\x3a\x05\x00\x00\xf9\x04\x30\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x05\x44\x00\x11\x05\x00\x00\xb4\x1a\x84\x08\x00\x00\x0f\x05\x00\x00\xb4\x1a\x00\x00\xe3\x00\xd9\x00\x00\x00\x00\x00\x0d\x05\xb4\x1a\x00\x00\x00\x00\xbc\x04\x00\x00\x00\x00\x00\x00\x1a\x16\x3d\x11\x00\x00\xab\x04\xfb\x04\x00\x00\x4d\x0f\x3d\x11\xd1\x0e\xfe\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x19\xea\x19\x21\x1b\xef\x04\xaa\x19\xf4\x13\xfa\x04\x2c\x00\xaa\x19\x00\x00\xe9\x04\x00\x00\xd0\x18\xf3\x04\x97\x1a\x00\x00\x1f\x03\x00\x00\x00\x00\x00\x00\xf7\x04\x00\x00\xb8\x04\x00\x00\x1a\x16\x00\x00\x00\x00\x1e\x01\x00\x00\x00\x00\x00\x00\x00\x00\xed\x04\xf6\x04\xe0\x04\x98\x04\x7e\x04\x00\x00\x00\x00\xaa\x19\x67\x04\xbf\x04\xbb\x04\xb6\x04\xb6\x04\x30\x12\xc4\x04\x00\x00\x00\x00\x09\x01\x00\x00\x00\x00\x00\x00\xf1\xff\x8b\x04\x3d\x11\x00\x00\x00\x00\x21\x1b\x44\x08\x6d\x1a\x6d\x1a\xaa\x19\xca\x01\xb0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x1a\x35\x04\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x11\x00\x00\x00\x00\x00\x00\xaa\x19\x00\x00\x00\x00\x8e\x04\x00\x00\x00\x00\x1d\x04\x00\x00\x00\x00\x73\x15\x4a\x04\x41\x04\x2d\x00\xb8\x04\x00\x00\x00\x00\x3d\x11\x3e\x04\x00\x00\x00\x00\x5a\x04\x00\x00\x6d\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x04\x00\x00\x08\x15\x00\x00\x52\x04\x51\x04\x00\x00\x00\x00\x00\x00\x57\x04\x1a\x08\x47\x04\x73\x15\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x3b\x04\x00\x00\x00\x00\x00\x00"# + +happyGotoOffsets :: HappyAddr +happyGotoOffsets = HappyA# "\x01\x00\x56\x22\xd6\x24\x61\x02\xd6\x05\x03\x00\x02\x00\x4e\x04\x1b\x04\x00\x00\x00\x00\x00\x00\x37\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x03\x88\x04\xea\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x03\x00\x00\x00\x00\x00\x00\x13\x04\x00\x00\xd7\x06\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x59\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x22\xa1\x03\xbe\x22\x00\x00\x3e\x2b\x22\x16\x28\x2b\xc0\x24\x00\x00\x03\x22\xed\x21\x8e\x29\xc3\x05\x56\x03\x98\x03\xce\x00\x00\x00\xa8\x06\xe6\x28\x00\x00\xd0\x28\xc4\x06\x00\x00\x00\x00\x00\x00\x90\xff\x00\x00\x00\x00\x00\x00\xb1\x06\x8e\xff\x00\x00\x61\x03\xee\x03\x9e\x02\xe4\x03\xb3\x03\x7a\x07\x1b\x03\x00\x00\x00\x00\x00\x00\x9d\x08\x00\x00\x00\x00\x00\x00\xbd\x16\x0d\x2b\x9a\x21\x7e\x28\xf5\xff\x02\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x02\x00\x00\x00\x00\xf9\xff\x9e\x06\xc6\x03\x3e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x2a\x00\x00\x00\x00\x1f\x00\x04\x00\x00\x00\x00\x00\x00\x00\x58\x17\x00\x00\x00\x00\x00\x00\xa4\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x02\x00\x00\x00\x00\xb0\x05\x00\x00\x00\x00\x00\x00\x68\x28\x16\x28\x00\x28\xae\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x01\x00\x00\x00\x00\x00\x00\xcf\x03\x5d\x02\x00\x00\x00\x00\x85\x01\x9c\x06\x0d\x02\x00\x00\x37\x07\x38\x04\x9f\x03\x00\x00\x68\x1e\x15\x1e\x8a\x03\x00\x00\x88\x06\x2a\x01\x73\x06\xb8\x03\x00\x00\xb0\x03\xa0\x03\x00\x00\x31\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\xff\x2c\x03\x00\x00\x00\x00\x00\x00\x34\x03\x24\x01\x00\x00\x00\x00\x56\x08\x00\x00\x00\x00\x00\x00\x00\x00\xdf\x05\xcb\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x23\x16\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x16\x00\x00\x00\x00\x33\x03\xb5\x2a\x9a\x2a\x19\x02\x00\x00\x95\x05\xec\x29\x5b\x00\x9d\x05\xd8\x00\x89\x05\xec\xff\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x02\x60\x06\x00\x00\x9f\x01\x00\x00\xc9\x00\x00\x00\x00\x00\x32\x02\x4d\x06\x13\x05\xcc\x02\x00\x00\xd0\x03\xb5\x03\x86\x03\x06\x00\x71\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x0d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x06\x00\x00\x00\x00\x3e\x05\x00\x00\x00\x00\x27\x06\x00\x00\x00\x00\x00\x00\xf8\x00\xfe\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x01\xbe\x00\x35\x03\x00\x00\x2c\x05\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x03\x0d\x03\x00\x00\x84\x21\xc2\x1d\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\x23\x00\x00\x00\x00\x9c\x01\x00\x00\x6e\x24\x98\x27\x00\x00\x00\x00\x00\x00\x2e\x23\x00\x00\xdc\x22\x46\x27\x7d\x1b\x0c\x03\x30\x27\x00\x00\x6f\x1d\x00\x00\x00\x00\xa4\x29\x00\x00\x00\x00\xae\x02\x54\x03\x00\x00\x00\x00\xac\x02\x58\x2a\x00\x00\x43\x03\x00\x00\x00\x00\x1b\x00\x79\xff\xfc\x02\xed\x03\xcf\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x02\x00\x00\x00\x00\x00\x00\x00\x00\x77\x02\x1c\x1d\xef\xff\x8a\xff\x47\x02\x00\x00\x00\x00\x95\x02\xcc\x04\x74\x05\x00\x00\x00\x00\xaa\x03\x00\x00\x00\x00\x00\x00\xc7\x02\xb8\x02\x00\x00\x05\x07\x00\x00\x00\x00\x00\x00\x3b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x26\x00\x00\xc8\x26\x95\x01\x00\x00\x00\x00\x12\x02\xf4\x01\x76\x26\x00\x00\x60\x26\x0e\x26\xf8\x25\x00\x00\xb6\x02\x00\x00\x00\x00\x00\x00\x1b\x02\x00\x00\xb9\x04\x84\x04\x00\x00\x60\x00\xd6\x01\x42\x2a\x9a\x02\x27\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x03\x00\x00\xdd\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x29\x2f\x00\x8f\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x01\x00\x00\x39\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x1c\x00\x00\x31\x21\x2a\x00\x25\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x01\x00\x00\x1a\x00\x09\x00\x00\x00\x00\x00\x00\x00\xd2\xff\xc1\x01\xee\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\x00\x00\x00\x00\xde\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\xa6\x25\x00\x00\xea\x01\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x26\x05\x00\x00\x00\x00\x0f\x07\x25\x02\x00\x00\x00\x00\x00\x00\x8a\x02\x00\x00\x00\x00\xdd\xff\x00\x00\xa9\xff\x23\x02\x00\x00\x00\x00\x00\x00\xb2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x04\x00\x00\x00\x00\x00\x00\xd9\xff\x00\x00\x00\x00\x00\x00\x75\x04\x17\x02\x00\x00\x3d\x00\x36\x00\x00\x00\x86\x02\x92\x00\x00\x00\x0d\x01\x00\x00\x00\x00\x00\x00\x52\x07\x9b\xff\x00\x00\x00\x00\xc1\x03\x65\x07\x00\x00\x7e\x02\x00\x00\x00\x00\xa3\x01\xbb\x1e\xc8\x20\x00\x00\x00\x00\x00\x00\x00\x00\x90\x25\x00\x00\x00\x00\x23\x1c\xd0\x1b\x00\x00\x00\x00\xb2\x20\x00\x00\x00\x00\x00\x00\xd0\x01\x00\x00\x73\x2a\x00\x00\x00\x00\x00\x00\x84\x03\xf0\x23\x00\x00\x7f\x01\x6d\x00\x30\x00\x88\x01\x6a\x02\x00\x00\xc8\x02\x00\x00\x7b\x01\x00\x00\x00\x00\x00\x00\x74\x03\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\xbf\x01\x00\x00\x3e\x25\x5f\x20\x7c\x00\x00\x00\x80\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xff\x00\x00\x00\x00\x00\x00\x53\x02\x00\x00\x00\x00\x26\x02\x00\x00\x18\x02\x00\x00\x76\x00\x00\x00\x8f\x01\x00\x00\x00\x00\x09\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x04\x3e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\xfd\x01\xc7\x01\x00\x00\x00\x00\x42\x01\x00\x00\x39\x01\x00\x00\x00\x00\x28\x02\x00\x00\x9c\x03\x00\x00\x3a\x01\x00\x00\x00\x00\x34\x01\x00\x00\x00\x00\x00\x00\xf6\x1f\xe0\x1f\x8d\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x00\xcd\x03\x25\x01\x00\x00\x00\x00\x5f\x07\x00\x00\x24\x07\x25\x04\x4c\x07\x00\x00\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\xe6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x01\x00\x00\x00\x00\x6f\x01\x00\x00\x00\x00\x0d\x01\x0d\x01\x00\x00\x00\x00\x00\x00\x0d\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x03\x58\x24\x00\x00\xf9\x00\xb0\x00\x00\x00\x76\x1c\x77\x1f\x06\x24\x00\x00\x00\x00\x00\x00\x00\x00\x59\x01\x00\x00\x00\x00\xe9\x05\x57\x02\xcf\x01\x00\x00\xea\x04\xe6\x02\x00\x00\xea\xff\xd6\x04\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x12\x00\x00\x00\x34\x01\x00\x00\x00\x00\x00\x00\x1b\x01\x00\x00\x4e\x00\x00\x00\xee\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\xc2\x04\x00\x00\x00\x00\x00\x00\x5d\x00\x26\x00\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x1f\x00\x00\x00\x00\x5f\x01\xeb\x03\x12\x06\x5f\x05\xaf\x04\xc9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x1f\x00\x00\x00\x00\x00\x00\x9c\x04\x00\x00\x00\x00\xd3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x4f\x00\xe3\x02\x5a\xff\x00\x00\x00\x00\x28\x25\xb1\xff\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xff\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyDefActions :: HappyAddr +happyDefActions = HappyA# "\xbd\xfd\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xfd\x00\x00\x00\x00\xf2\xff\x00\x00\x51\xff\x38\xff\x58\xff\x4e\xff\x4c\xff\x45\xff\x00\x00\x3b\xff\x00\x00\x00\x00\xe1\xfd\xb6\xfd\x01\xfe\x3e\xff\xdb\xfd\x4b\xff\xe8\xfd\xdd\xfd\xdc\xfd\xd9\xfd\xda\xfd\x00\x00\x00\x00\x00\x00\xe4\xfd\xe0\xfd\xdf\xfd\xde\xfd\xe3\xfd\xe2\xfd\xe7\xfd\x31\xff\xe5\xfd\xe6\xfd\x8a\xff\xb1\xff\x00\x00\x00\x00\x95\xff\x8b\xff\x89\xff\xd5\xfe\xc2\xfe\xb8\xfe\xb3\xfe\xab\xfe\xa7\xfe\x99\xfe\xa4\xfe\xa5\xfe\xa6\xfe\x08\xfe\x03\xfe\xea\xfd\xfe\xfd\xa3\xfe\xe9\xfd\xc7\xfd\xc5\xfd\xc6\xfd\xc4\xfd\xc3\xfd\xc2\xfd\xc1\xfd\xc0\xfd\xbf\xfd\xbe\xfd\x00\x00\x00\x00\x00\x00\x9d\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x98\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xfd\x00\x00\x00\x00\x8e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\xff\x00\x00\x00\x00\xbd\xfd\xaf\xff\xae\xff\xad\xff\x00\x00\xbd\xfd\x93\xff\x00\x00\x6b\xff\x00\x00\x6b\xff\x6d\xff\x5f\xff\x5f\xff\x23\xfe\xcd\xfe\xc7\xfe\xc6\xfe\xc4\xfe\xbd\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xfe\x00\x00\xe9\xff\xf9\xff\xf7\xff\xbd\xfd\x00\x00\xe9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xfe\x00\x00\x7d\xff\x00\x00\xdd\xff\xdd\xff\x00\x00\x00\x00\x22\xfe\x00\x00\xb1\xfe\xf0\xfd\xef\xfd\xcc\xfe\xf4\xfd\xeb\xfd\xd8\xfd\xfa\xfd\xd5\xfd\xd4\xfd\xd1\xfd\xd6\xfd\xc8\xfd\xd7\xfd\x00\x00\xce\xfd\xec\xfd\x00\x00\xd0\xfd\xcf\xfd\xcd\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xff\x00\x00\x5d\xff\x5a\xff\x5b\xff\x07\xfe\x00\xfe\x00\x00\x00\x00\x00\x00\x6e\xff\x6b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\xff\x00\x00\x00\x00\xb9\xfe\x1d\xfe\x1d\xfe\xe6\xfe\xba\xfe\x00\x00\x90\xff\x00\x00\x2b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4b\xfe\x78\xfe\x74\xfe\x77\xfe\x76\xfe\x75\xfe\x70\xfe\x6f\xfe\x6e\xfe\x6d\xfe\x6c\xfe\x6b\xfe\x6a\xfe\x69\xfe\x68\xfe\x67\xfe\x72\xfe\x71\xfe\x66\xfe\x65\xfe\x64\xfe\x63\xfe\x62\xfe\x61\xfe\x60\xfe\x5f\xfe\x5e\xfe\x5d\xfe\x5c\xfe\x5b\xfe\x5a\xfe\x59\xfe\x58\xfe\x57\xfe\x56\xfe\x55\xfe\x54\xfe\x53\xfe\x52\xfe\x51\xfe\x50\xfe\x73\xfe\x4f\xfe\x4e\xfe\x4d\xfe\x8f\xfe\x90\xfe\x00\x00\x00\x00\x00\x00\x92\xfe\x91\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xfe\x00\x00\x00\x00\x84\xfe\x00\x00\x00\x00\xbb\xfe\xac\xfe\x8b\xfe\x47\xfe\x00\x00\x46\xfe\xee\xfd\xed\xfd\x00\x00\xf8\xfd\xd3\xfd\xd2\xfd\xcc\xfd\x0c\xfe\x00\x00\xca\xfd\xcb\xfd\xc9\xfd\x00\x00\x0a\xfe\x8c\xfe\x8b\xfe\x00\x00\x00\x00\x00\x00\xf4\xfd\x00\x00\xd2\xfd\xcc\xfd\x0d\xfe\xca\xfd\xd0\xfd\xcb\xfd\xc9\xfd\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xff\x00\x00\x00\x00\xb0\xff\x00\x00\x00\x00\x42\xff\x34\xff\x00\x00\x00\x00\x40\xff\x34\xff\x00\x00\x00\x00\x00\x00\x00\x00\x44\xff\x00\x00\x00\x00\x00\x00\x4f\xff\x00\x00\x3c\xff\x00\x00\xb4\xfd\xb3\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xdd\xff\xdd\xff\x00\x00\xdd\xff\xec\xff\xde\xff\x00\x00\x00\x00\x00\x00\xf2\xff\xf4\xff\xbb\xfd\xbc\xfd\x54\xff\x55\xff\x00\x00\x00\x00\x56\xff\x57\xff\x39\xff\x52\xff\x43\xff\x3d\xff\x41\xff\x8d\xfe\x00\x00\x4a\xff\x47\xff\x00\x00\x3f\xff\x49\xff\x00\x00\x48\xff\x32\xff\x30\xff\x00\x00\x00\x00\xb2\xff\xf2\xfd\xf1\xfd\xab\xff\xf6\xfd\xfc\xfd\x00\x00\x1f\xff\x02\xff\x00\x00\x00\x00\x18\xff\x86\xff\x00\x00\x79\xff\xc3\xfe\xd7\xfe\xd3\xfe\xd1\xfe\x00\x00\x00\x00\x00\x00\x15\xfe\x13\xfe\xaa\xfe\x12\xfe\xad\xfe\xae\xfe\x00\x00\x53\xff\x02\xfe\xfd\xfd\x9c\xfe\x00\x00\xa1\xfe\xa2\xfe\x00\x00\x0b\xfe\x00\x00\x00\x00\x09\xfe\x00\x00\x8a\xfe\x00\x00\x9e\xfe\x00\x00\x45\xfe\x00\x00\xd7\xfe\x00\x00\x9b\xfe\x00\x00\x9b\xff\x96\xfe\x00\x00\x95\xfe\x94\xfe\x00\x00\xdd\xff\xa8\xff\x00\x00\x00\x00\x48\xfe\x7f\xfe\x73\xff\x78\xff\x77\xff\x00\x00\xbd\xfd\xf2\xfe\x2d\xff\xf6\xfe\x00\x00\x91\xff\x53\xff\x92\xff\x9d\xff\x9e\xff\xbd\xfd\x18\xfe\xcf\xfe\x00\x00\x00\x00\x1b\xfe\x1d\xfe\xbd\xfd\xbd\xfd\x00\x00\x00\x00\x59\xff\xf6\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\xff\x6f\xff\x98\xff\x61\xff\x97\xff\x00\x00\x00\x00\x00\x00\x5e\xff\x96\xff\xc8\xfe\xc9\xfe\xca\xfe\xcb\xfe\xce\xfe\x00\x00\xc5\xfe\xb2\xfe\x00\x00\x97\xfe\x00\x00\x8e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xff\xba\xfd\xb9\xfd\x00\x00\x4b\xfe\xeb\xff\xdd\xff\xdd\xff\x00\x00\xe0\xff\x00\x00\x48\xfe\x00\x00\xdb\xff\x00\x00\x00\x00\x00\x00\xb6\xfe\xb7\xfe\xbe\xfe\xc0\xfe\x7b\xff\x87\xff\x7c\xff\x88\xff\xdd\xff\x8c\xff\xdd\xff\x0f\xfe\xa6\xfe\xdf\xff\x00\x00\xc1\xfe\xf9\xfd\x5c\xff\x06\xfe\xff\xfd\x62\xff\x70\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6a\xff\x00\x00\x80\xff\x7e\xff\x81\xff\x84\xff\xa7\xff\x54\xff\xa6\xff\x00\x00\x20\xfe\x17\xfe\x1a\xfe\x1e\xfe\x1f\xfe\x1d\xfe\x21\xfe\x00\x00\xdd\xff\xdd\xff\x9c\xff\xa2\xff\x00\x00\x00\x00\x2a\xff\x28\xff\x9f\xff\xbd\xfd\xbc\xfe\xdd\xff\xdd\xff\x99\xff\x00\x00\x05\xfe\x00\x00\x00\x00\x00\x00\x76\xff\x75\xff\x74\xff\x49\xfe\x00\x00\x4c\xfe\x00\x00\xe8\xfd\xd9\xfd\xe4\xfd\xe0\xfd\xdf\xfd\xde\xfd\xe3\xfd\xe2\xfd\xe7\xfd\xe5\xfd\xe6\xfd\x79\xfe\xde\xff\xaa\xff\x00\x00\x30\xfe\x00\x00\x32\xfe\x00\x00\xbd\xfd\x85\xfe\xd9\xfe\xbd\xfd\x41\xfe\x3d\xfe\x3b\xfe\x3a\xfe\x39\xfe\x00\x00\x43\xfe\x8b\xfe\x3f\xfe\x40\xfe\xf7\xfd\x89\xfe\x82\xfe\x83\xfe\x9f\xfe\xa0\xfe\x00\x00\x86\xfe\xa8\xfe\x00\x00\xa9\xfe\x00\x00\x00\x00\xd4\xfe\xd2\xfe\xda\xfe\x00\x00\x00\x00\x1e\xff\x1c\xff\x00\x00\x31\xff\xf5\xfe\xfc\xfe\xfb\xfe\x00\x00\xf8\xfe\xf9\xfe\xbd\xfd\xa4\xff\x00\x00\x02\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3a\xff\x00\x00\x33\xff\x00\x00\x35\xff\xb5\xfd\xf3\xfd\xf3\xff\xef\xff\xee\xff\xf0\xff\x00\x00\x00\x00\xf1\xff\xed\xff\x46\xff\x00\x00\xac\xff\xf5\xfd\xfb\xfd\xbd\xfd\xa1\xff\x01\xff\xfd\xfe\x00\x00\x02\xff\x26\xff\xdd\xff\xdd\xff\x00\x00\x00\x00\x00\x00\x0b\xff\x13\xff\x00\x00\x1a\xff\x17\xff\x12\xff\x00\x00\x00\x00\x3e\xff\x00\x00\x00\x00\x00\x00\x18\xff\x85\xff\x7a\xff\x00\x00\x00\x00\x00\x00\x16\xfe\x14\xfe\x88\xfe\x87\xfe\x44\xfe\x38\xfe\x00\x00\x00\x00\x00\x00\xd8\xfe\x2f\xfe\x00\x00\x9a\xfe\x93\xfe\xa9\xff\x7d\xfe\x80\xfe\x00\x00\x9a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xdd\xff\x2d\xff\x2d\xff\x2c\xff\xe4\xfe\x00\x00\x00\x00\x19\xfe\x1c\xfe\xa5\xff\x00\x00\x83\xff\x69\xff\x00\x00\x00\x00\x66\xff\x64\xff\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\x11\xfe\xde\xff\x8f\xff\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\xd7\xff\xf8\xff\x00\x00\xe4\xff\xdd\xff\xcd\xff\xe2\xff\xca\xff\xe5\xff\xc8\xff\x00\x00\xde\xff\xe1\xff\x7d\xfe\xf5\xff\x00\x00\xd7\xff\xd5\xff\xd4\xff\xb7\xfd\xd3\xff\xd8\xff\x00\x00\xea\xff\xe8\xff\xe7\xff\x00\x00\x8d\xff\x10\xfe\x00\x00\x0e\xfe\xbf\xfe\x00\x00\x00\x00\x65\xff\x67\xff\x82\xff\x7f\xff\xe7\xfe\xe8\xfe\x00\x00\xdd\xff\xe2\xfe\xdf\xfe\xe0\xfe\xe1\xfe\xd5\xfe\x94\xff\x00\x00\x6b\xff\x27\xff\x29\xff\xf0\xfe\x00\x00\x00\x00\x2d\xfe\x2e\xfe\xdd\xff\x2a\xfe\x00\x00\x71\xff\x00\x00\x04\xfe\x4a\xfe\x00\x00\x31\xfe\x3e\xfe\x3c\xfe\x00\x00\x00\x00\x00\x00\x42\xfe\xd0\xfe\x33\xfe\x1d\xff\x00\x00\x0a\xff\x4d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x0e\xff\x0f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\xff\xfa\xfe\xf7\xfe\x00\x00\x00\x00\x00\x00\xa3\xff\xfe\xfe\x00\x00\x00\xff\x02\xff\x00\x00\x2f\xff\xa0\xff\xff\xfe\x24\xff\x25\xff\xdd\xff\x21\xff\x00\x00\x00\x00\x00\x00\x11\xff\x36\xff\x13\xff\x1b\xff\x00\x00\x0d\xff\x50\xff\x16\xff\x00\x00\x00\x00\x07\xff\x15\xff\x3d\xff\x00\x00\x37\xfe\x35\xfe\x36\xfe\x7a\xfe\x7e\xfe\x7c\xfe\x00\x00\x00\x00\x72\xff\xd7\xfe\x27\xfe\x25\xfe\x00\x00\x00\x00\xde\xff\x2c\xfe\xf3\xfe\xf4\xfe\xed\xfe\xdd\xff\xee\xfe\xec\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xe5\xfe\x1f\xff\x00\x00\x6c\xff\x00\x00\xcf\xff\x00\x00\x00\x00\xd8\xff\xd9\xff\x00\x00\xce\xff\xe3\xff\xcb\xff\xc6\xff\xc9\xff\x00\x00\xc7\xff\x00\x00\xd6\xff\xda\xff\x00\x00\xb5\xff\xb4\xff\xb3\xff\xd1\xff\x00\x00\x00\x00\x00\x00\x02\xff\x00\x00\xe3\xfe\xd6\xfe\x00\x00\x00\x00\x00\x00\x51\xff\xf6\xfe\xf6\xfe\xde\xff\xf1\xfe\x2b\xfe\x28\xfe\x00\x00\x26\xfe\x29\xfe\x84\xfe\x00\x00\x00\x00\x00\x00\x09\xff\x14\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\x23\xff\x22\xff\x20\xff\x10\xff\x0c\xff\x05\xff\x06\xff\x00\x00\x00\x00\x08\xff\x34\xfe\x81\xfe\x7b\xfe\x00\x00\xef\xfe\xe9\xfe\xeb\xfe\x00\x00\xde\xfe\xdd\xfe\xbd\xfd\xdc\xfe\x63\xff\x00\x00\xd2\xff\xd0\xff\x00\x00\x00\x00\xc4\xff\xc2\xff\x00\x00\xf6\xff\xb6\xff\x00\x00\x02\xff\xea\xfe\x24\xfe\x00\x00\x04\xff\x00\x00\xdb\xfe\xb5\xfe\xc5\xff\xcc\xff\xc3\xff\x00\x00\xbf\xff\xd7\xff\x03\xff\x00\x00\xd7\xff\xbc\xff\xbb\xff\xb8\xfd\xba\xff\x00\x00\x00\x00\xd8\xff\xc0\xff\xbd\xff\xc1\xff\x00\x00\xb8\xff\x00\x00\xb9\xff\xb7\xff"# + +happyCheck :: HappyAddr +happyCheck = HappyA# "\xff\xff\x00\x00\x09\x00\x02\x00\x02\x00\x02\x00\x0f\x00\x10\x00\x11\x00\x2b\x00\x05\x00\x05\x00\x0f\x00\x2f\x00\x22\x00\x0b\x00\x0c\x00\x68\x00\x2b\x00\x22\x00\x0b\x00\x0c\x00\x2f\x00\x66\x00\x1b\x00\x1c\x00\x2b\x00\xa2\x00\x1d\x00\x1e\x00\x2f\x00\x0f\x00\x2b\x00\x33\x00\x59\x00\x11\x00\x2f\x00\x0b\x00\x0c\x00\x1c\x00\x55\x00\x56\x00\x0b\x00\x0c\x00\x28\x00\xd3\x00\x55\x00\x56\x00\x0b\x00\x0c\x00\x55\x00\x56\x00\xaa\x00\x0b\x00\x0c\x00\x8c\x00\xaa\x00\x1c\x00\xaa\x00\x0b\x00\x0c\x00\x1c\x00\x4d\x00\x1c\x00\x1c\x00\x0b\x00\x0c\x00\x16\x00\x5a\x00\x1d\x00\x1e\x00\x28\x00\x0b\x00\x0c\x00\xd1\x00\x0c\x00\x1a\x00\x09\x00\x33\x00\x0b\x00\x00\x00\x38\x00\x39\x00\x22\x00\x28\x00\x29\x00\x6c\x00\x46\x00\xbd\x00\x48\x00\x1c\x00\xd1\x00\x09\x00\x22\x00\x56\x00\xd1\x00\x2e\x00\xd1\x00\x4f\x00\x1e\x00\x29\x00\xca\x00\x17\x00\x38\x00\x39\x00\x22\x00\x39\x00\x27\x00\x3a\x00\xc2\x00\x2f\x00\x1f\x00\xc7\x00\xc8\x00\x12\x00\x13\x00\xc9\x00\xca\x00\x63\x00\x24\x00\x0b\x00\x0c\x00\x72\x00\x1c\x00\x6b\x00\x1c\x00\x66\x00\x1f\x00\x39\x00\x21\x00\xb9\x00\x23\x00\x24\x00\x25\x00\x26\x00\xb5\x00\x17\x00\x13\x00\x2a\x00\x30\x00\x2c\x00\x57\x00\x61\x00\x84\x00\xc7\x00\xc8\x00\x6c\x00\x22\x00\x57\x00\x1f\x00\xc4\x00\x21\x00\x73\x00\x23\x00\x24\x00\x25\x00\x26\x00\x73\x00\x6e\x00\x73\x00\x2a\x00\x84\x00\x2c\x00\xb5\x00\xd1\x00\x84\x00\xba\x00\x84\x00\x84\x00\xbd\x00\xd1\x00\xbf\x00\xa3\x00\xb6\x00\xd1\x00\xd1\x00\xb9\x00\xb4\x00\xc4\x00\xb4\x00\xb0\x00\xb8\x00\xca\x00\xb8\x00\xd1\x00\xcd\x00\xc3\x00\xc4\x00\xc5\x00\xa3\x00\xc7\x00\xc8\x00\xd1\x00\xc4\x00\xc5\x00\xc4\x00\xc5\x00\xc8\x00\xd1\x00\xc8\x00\xb6\x00\x6c\x00\xd1\x00\xb9\x00\xd5\x00\xc8\x00\xc8\x00\xb0\x00\xb5\x00\xd4\x00\xd1\x00\xd1\x00\xd1\x00\xc3\x00\xc4\x00\xc5\x00\x78\x00\xc7\x00\xc8\x00\x6e\x00\xb4\x00\xc4\x00\xc5\x00\xc4\x00\xb8\x00\x4f\x00\x82\x00\x84\x00\x84\x00\x84\x00\x86\x00\xd5\x00\x26\x00\x89\x00\x8a\x00\x8b\x00\xc4\x00\xc5\x00\x78\x00\x2d\x00\xc8\x00\x91\x00\xb4\x00\xc4\x00\xc5\x00\x19\x00\xb8\x00\x1e\x00\x82\x00\xb4\x00\x84\x00\x22\x00\x86\x00\xb8\x00\x22\x00\x89\x00\x8a\x00\x8b\x00\xc4\x00\xc5\x00\x30\x00\x22\x00\xc8\x00\x91\x00\x3f\x00\xc4\x00\xc5\x00\x28\x00\x43\x00\xc8\x00\x45\x00\x46\x00\x47\x00\xb6\x00\xd4\x00\xb3\x00\x46\x00\x47\x00\xb6\x00\xb7\x00\x5a\x00\xb9\x00\x44\x00\x45\x00\x46\x00\x47\x00\xc3\x00\xc4\x00\xc5\x00\xd3\x00\x08\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\x6c\x00\x22\x00\xb6\x00\xb7\x00\xb2\x00\xb9\x00\xd0\x00\x16\x00\x5a\x00\xb7\x00\x01\x00\x17\x00\x2d\x00\x63\x00\x64\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x25\x00\x22\x00\x16\x00\xc6\x00\x1f\x00\x6c\x00\x21\x00\xd0\x00\x23\x00\x24\x00\x25\x00\x26\x00\x31\x00\x32\x00\x33\x00\x2a\x00\xb4\x00\x2c\x00\x27\x00\x45\x00\x46\x00\x47\x00\x17\x00\xc4\x00\xc5\x00\xa8\x00\x19\x00\x58\x00\x59\x00\x17\x00\x32\x00\x33\x00\xc4\x00\xc5\x00\x1f\x00\x22\x00\x21\x00\x0b\x00\x0c\x00\x28\x00\x22\x00\xd6\x00\x3f\x00\x40\x00\x41\x00\x2a\x00\x43\x00\x2c\x00\x45\x00\x46\x00\x47\x00\x79\x00\x17\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x3e\x00\x3f\x00\xc4\x00\xc5\x00\x66\x00\x43\x00\x22\x00\x45\x00\x46\x00\x47\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x8c\x00\xb6\x00\x8e\x00\xd6\x00\xc4\x00\xc5\x00\x30\x00\xc7\x00\xc8\x00\xc4\x00\xc5\x00\x61\x00\xc7\x00\xc8\x00\xc3\x00\xc4\x00\xc5\x00\xc4\x00\xc5\x00\x78\x00\xc7\x00\xc8\x00\xd6\x00\x17\x00\x0b\x00\x0c\x00\x22\x00\xd6\x00\x17\x00\x82\x00\x74\x00\x84\x00\x28\x00\x86\x00\x22\x00\xd6\x00\x89\x00\x8a\x00\x8b\x00\x22\x00\x6f\x00\x70\x00\x71\x00\x1f\x00\x91\x00\x21\x00\x19\x00\xd2\x00\x19\x00\x78\x00\xb9\x00\xc4\x00\xc5\x00\x29\x00\x2a\x00\x22\x00\x2c\x00\x22\x00\x64\x00\x82\x00\x91\x00\x84\x00\x93\x00\x86\x00\xc7\x00\xc8\x00\x89\x00\x8a\x00\x8b\x00\xd6\x00\x05\x00\x06\x00\xc4\x00\xc5\x00\x91\x00\xc7\x00\xc8\x00\x19\x00\xb3\x00\x50\x00\x51\x00\xb6\x00\xb7\x00\x54\x00\xb9\x00\x3f\x00\x22\x00\x16\x00\xb7\x00\x43\x00\xd6\x00\x45\x00\x46\x00\x47\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc8\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x22\x00\xd0\x00\xb3\x00\x1e\x00\x26\x00\xb6\x00\xb7\x00\x22\x00\xb9\x00\x2b\x00\x36\x00\xc4\x00\xc5\x00\xd6\x00\xc7\x00\xc8\x00\x05\x00\x06\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xd2\x00\x08\x00\x78\x00\x0a\x00\x1f\x00\xd6\x00\x21\x00\xd0\x00\xca\x00\x16\x00\xb6\x00\xcd\x00\x82\x00\x0f\x00\x84\x00\x2a\x00\x86\x00\x2c\x00\xd3\x00\x89\x00\x8a\x00\x8b\x00\x92\x00\xc3\x00\xc4\x00\xc5\x00\x1f\x00\x91\x00\x21\x00\x8c\x00\x25\x00\x8e\x00\x25\x00\x26\x00\x15\x00\x05\x00\x06\x00\x2a\x00\xc2\x00\x2c\x00\x0b\x00\x0c\x00\x31\x00\x32\x00\x33\x00\xc9\x00\xca\x00\x14\x00\x3e\x00\x3f\x00\xc4\x00\xc5\x00\x16\x00\x43\x00\xc8\x00\x45\x00\x46\x00\x47\x00\x1c\x00\xb1\x00\xb2\x00\xb3\x00\x0b\x00\x0c\x00\xb6\x00\xb7\x00\xd2\x00\xb9\x00\x3f\x00\xcb\x00\xd2\x00\xcd\x00\x43\x00\xcf\x00\x45\x00\x46\x00\x47\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x0b\x00\x0c\x00\x70\x00\x71\x00\x92\x00\xc4\x00\xc5\x00\xd0\x00\xc7\x00\xc8\x00\x78\x00\xc3\x00\xc4\x00\xc5\x00\xba\x00\xc7\x00\xc8\x00\xbd\x00\xcd\x00\xbf\x00\x82\x00\x4e\x00\x84\x00\xd6\x00\x86\x00\x3c\x00\x3d\x00\x89\x00\x8a\x00\x8b\x00\xca\x00\x66\x00\x78\x00\xcd\x00\x1f\x00\x91\x00\x21\x00\xc4\x00\xc5\x00\xb6\x00\x25\x00\x26\x00\x82\x00\x66\x00\x84\x00\x2a\x00\x86\x00\x2c\x00\xcd\x00\x89\x00\x8a\x00\x8b\x00\xc3\x00\xc4\x00\xc5\x00\x3e\x00\x3f\x00\x91\x00\x41\x00\xaf\x00\x43\x00\x01\x00\x45\x00\x46\x00\x47\x00\x1f\x00\xb6\x00\x21\x00\x8c\x00\xb3\x00\x8e\x00\xd1\x00\xb6\x00\xb7\x00\xd2\x00\xb9\x00\x2a\x00\x01\x00\x2c\x00\xc3\x00\xc4\x00\xc5\x00\x06\x00\x07\x00\x97\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\x50\x00\x51\x00\xb6\x00\xb7\x00\x08\x00\xb9\x00\xd0\x00\xc4\x00\xc5\x00\xb6\x00\xc7\x00\xc8\x00\xd2\x00\xae\x00\xaf\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb6\x00\xc3\x00\xc4\x00\xc5\x00\xd6\x00\xc4\x00\xc5\x00\xd0\x00\xc7\x00\xc8\x00\x78\x00\x5c\x00\x5d\x00\xc3\x00\xc4\x00\xc5\x00\x80\x00\x81\x00\x82\x00\x83\x00\x82\x00\xd2\x00\x84\x00\xd6\x00\x86\x00\x0b\x00\x0c\x00\x89\x00\x8a\x00\x8b\x00\x35\x00\x26\x00\xb4\x00\x6a\x00\x6b\x00\x91\x00\xb8\x00\x6a\x00\x6b\x00\xc4\x00\xc5\x00\x78\x00\xc7\x00\xc8\x00\x18\x00\x19\x00\x1a\x00\x37\x00\xc4\x00\xc5\x00\x6c\x00\x82\x00\xc8\x00\x84\x00\x2b\x00\x86\x00\x2d\x00\xd6\x00\x89\x00\x8a\x00\x8b\x00\x26\x00\x29\x00\xb7\x00\x2b\x00\x27\x00\x91\x00\x29\x00\xb6\x00\xb3\x00\x0b\x00\x0c\x00\xb6\x00\xb7\x00\xd2\x00\xb9\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc3\x00\xc4\x00\xc5\x00\xac\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc3\x00\xc4\x00\xc5\x00\xd6\x00\xc7\x00\xc8\x00\x27\x00\xd0\x00\x29\x00\xb3\x00\x0d\x00\x0e\x00\xb6\x00\xb7\x00\x27\x00\xb9\x00\x29\x00\x6c\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x95\x00\x96\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x27\x00\x82\x00\x29\x00\x84\x00\x27\x00\x86\x00\x29\x00\xd0\x00\x89\x00\x8a\x00\x8b\x00\xb6\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x91\x00\xd1\x00\x75\x00\x76\x00\x77\x00\x78\x00\x0b\x00\x0c\x00\xc3\x00\xc4\x00\xc5\x00\x45\x00\x46\x00\x47\x00\x48\x00\x82\x00\x6d\x00\x84\x00\x4c\x00\x86\x00\x03\x00\x04\x00\x89\x00\x8a\x00\x8b\x00\x3f\x00\x40\x00\x41\x00\x32\x00\x43\x00\x91\x00\x45\x00\x46\x00\x47\x00\xb3\x00\x0b\x00\x0c\x00\xb6\x00\xb7\x00\xd2\x00\xb9\x00\x94\x00\x95\x00\x96\x00\x79\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x7d\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x0b\x00\x0c\x00\x45\x00\x46\x00\x47\x00\x48\x00\x79\x00\xd0\x00\xb3\x00\x4c\x00\x66\x00\xb6\x00\xb7\x00\xd2\x00\xb9\x00\x3f\x00\x2d\x00\x2e\x00\x25\x00\x43\x00\x27\x00\x45\x00\x46\x00\x47\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x31\x00\x32\x00\x33\x00\x27\x00\x3f\x00\x29\x00\x41\x00\xd0\x00\x43\x00\x8c\x00\x45\x00\x46\x00\x47\x00\x2d\x00\x2e\x00\x4a\x00\x4b\x00\x0b\x00\x0c\x00\x3e\x00\x3f\x00\x94\x00\x95\x00\x96\x00\x43\x00\x97\x00\x45\x00\x46\x00\x47\x00\x06\x00\x07\x00\x3f\x00\xb4\x00\x41\x00\x31\x00\x43\x00\xb8\x00\x45\x00\x46\x00\x47\x00\x2d\x00\x2e\x00\x4a\x00\x4b\x00\x0b\x00\x0c\x00\x3e\x00\x3f\x00\xc4\x00\xc5\x00\x31\x00\x43\x00\xc8\x00\x45\x00\x46\x00\x47\x00\x34\x00\x35\x00\x3f\x00\xb7\x00\x41\x00\x27\x00\x43\x00\x29\x00\x45\x00\x46\x00\x47\x00\x49\x00\x4a\x00\x4a\x00\x4b\x00\xc2\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x72\x00\xc9\x00\xca\x00\xcb\x00\x3f\x00\xcd\x00\x41\x00\xcf\x00\x43\x00\x36\x00\x45\x00\x46\x00\x47\x00\xd6\x00\x52\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x42\x00\x43\x00\xd3\x00\x45\x00\x46\x00\x47\x00\x3f\x00\x27\x00\x41\x00\x29\x00\x43\x00\x36\x00\x45\x00\x46\x00\x47\x00\x03\x00\x04\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x36\x00\xc4\x00\xc5\x00\xd1\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x8c\x00\x43\x00\x62\x00\x45\x00\x46\x00\x47\x00\x20\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x50\x00\x51\x00\x4e\x00\x53\x00\x54\x00\xa6\x00\xa7\x00\xa8\x00\x27\x00\xb7\x00\x29\x00\xc4\x00\xc5\x00\xd6\x00\xc7\x00\xc8\x00\x8c\x00\xb6\x00\x01\x00\x65\x00\xb9\x00\x17\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x03\x00\x04\x00\xd6\x00\xc3\x00\xc4\x00\xc5\x00\x17\x00\xc7\x00\xc8\x00\xb7\x00\x8c\x00\xc4\x00\xc5\x00\xd6\x00\xc7\x00\xc8\x00\x43\x00\x17\x00\x45\x00\x46\x00\x47\x00\x16\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x22\x00\x27\x00\xd6\x00\x29\x00\x3f\x00\xb7\x00\x41\x00\x27\x00\x43\x00\x29\x00\x45\x00\x46\x00\x47\x00\xd6\x00\x16\x00\x29\x00\xc2\x00\x2b\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\x32\x00\xb7\x00\x0a\x00\x0b\x00\x0c\x00\xc4\x00\xc5\x00\x49\x00\xc7\x00\xc8\x00\x55\x00\xd6\x00\xc2\x00\x5b\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\x84\x00\xb7\x00\xd6\x00\x44\x00\x45\x00\x46\x00\x47\x00\x69\x00\x6a\x00\x6b\x00\x1d\x00\xd6\x00\x08\x00\x09\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\x2b\x00\x41\x00\x2d\x00\x43\x00\x84\x00\x45\x00\x46\x00\x47\x00\x05\x00\x06\x00\x4a\x00\x4b\x00\xd6\x00\x4d\x00\x0a\x00\x0b\x00\x0c\x00\x29\x00\x3f\x00\x2b\x00\x41\x00\x25\x00\x43\x00\x1c\x00\x45\x00\x46\x00\x47\x00\x49\x00\x4a\x00\x4a\x00\x4b\x00\x49\x00\x4d\x00\x31\x00\x32\x00\x33\x00\x7d\x00\x7e\x00\x3f\x00\x67\x00\x41\x00\x28\x00\x43\x00\x1c\x00\x45\x00\x46\x00\x47\x00\x29\x00\x49\x00\x4a\x00\x4b\x00\x29\x00\xc4\x00\xc5\x00\x84\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x73\x00\x43\x00\x5b\x00\x45\x00\x46\x00\x47\x00\x17\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\x0c\x00\x41\x00\x17\x00\x43\x00\x0f\x00\x45\x00\x46\x00\x47\x00\x17\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\x43\x00\x27\x00\x45\x00\x46\x00\x47\x00\x8c\x00\x3f\x00\x1c\x00\x41\x00\x29\x00\x43\x00\x1c\x00\x45\x00\x46\x00\x47\x00\x73\x00\x49\x00\x4a\x00\x4b\x00\x53\x00\x54\x00\xc4\x00\xc5\x00\x2b\x00\xc7\x00\xc8\x00\x3f\x00\x1d\x00\x41\x00\xb7\x00\x43\x00\x72\x00\x45\x00\x46\x00\x47\x00\x28\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\x05\x00\x06\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x32\x00\x43\x00\x32\x00\x45\x00\x46\x00\x47\x00\x17\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x17\x00\x1e\x00\xb7\x00\x5b\x00\x22\x00\x43\x00\x84\x00\x45\x00\x46\x00\x47\x00\x5b\x00\x5c\x00\x5d\x00\xd6\x00\x84\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x05\x00\x43\x00\x17\x00\x45\x00\x46\x00\x47\x00\x32\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x22\x00\x43\x00\x20\x00\x45\x00\x46\x00\x47\x00\x29\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x1e\x00\x28\x00\xb7\x00\x0c\x00\x16\x00\xc4\x00\xc5\x00\x22\x00\xc7\x00\xc8\x00\x69\x00\x6a\x00\x6b\x00\xd6\x00\x1c\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x17\x00\x84\x00\xb7\x00\xd6\x00\x44\x00\x45\x00\x46\x00\x47\x00\x69\x00\x6a\x00\x6b\x00\x74\x00\x73\x00\xd6\x00\x78\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\x31\x00\x41\x00\xb7\x00\x43\x00\x1c\x00\x45\x00\x46\x00\x47\x00\x29\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\x84\x00\x1e\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\x84\x00\x41\x00\x25\x00\x43\x00\x84\x00\x45\x00\x46\x00\x47\x00\x1e\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\x28\x00\xc4\x00\xc5\x00\x17\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x64\x00\x43\x00\x56\x00\x45\x00\x46\x00\x47\x00\x5f\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x84\x00\x43\x00\x1d\x00\x45\x00\x46\x00\x47\x00\x1d\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\x30\x00\x41\x00\x17\x00\x43\x00\x5b\x00\x45\x00\x46\x00\x47\x00\x05\x00\x49\x00\x4a\x00\x4b\x00\xd6\x00\x7b\x00\x7c\x00\x7d\x00\x1d\x00\x22\x00\x3f\x00\x17\x00\x41\x00\x28\x00\x43\x00\x73\x00\x45\x00\x46\x00\x47\x00\x24\x00\x49\x00\x4a\x00\x4b\x00\x5b\x00\xc4\x00\xc5\x00\x24\x00\xc7\x00\xc8\x00\x3f\x00\x1d\x00\x41\x00\xb7\x00\x43\x00\x2d\x00\x45\x00\x46\x00\x47\x00\x22\x00\x2b\x00\x4a\x00\x4b\x00\xd6\x00\x2b\x00\x1d\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\x2b\x00\x41\x00\xb7\x00\x43\x00\x2c\x00\x45\x00\x46\x00\x47\x00\x41\x00\x1c\x00\x4a\x00\x4b\x00\xd6\x00\x29\x00\x28\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x1d\x00\x22\x00\xb7\x00\x2d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x7b\x00\x7c\x00\x7d\x00\x64\x00\x22\x00\xd6\x00\x84\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x21\x00\x43\x00\x5d\x00\x45\x00\x46\x00\x47\x00\x29\x00\x0c\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x0f\x00\x43\x00\x0f\x00\x45\x00\x46\x00\x47\x00\x16\x00\x46\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x1e\x00\x43\x00\x27\x00\x45\x00\x46\x00\x47\x00\x4b\x00\x1e\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x1e\x00\x43\x00\x24\x00\x45\x00\x46\x00\x47\x00\x17\x00\x17\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\x0f\x00\x41\x00\xb7\x00\x43\x00\x5f\x00\x45\x00\x46\x00\x47\x00\x28\x00\x0c\x00\x4a\x00\x4b\x00\xd6\x00\x21\x00\x28\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\x84\x00\x41\x00\x29\x00\x43\x00\x1d\x00\x45\x00\x46\x00\x47\x00\x84\x00\x1d\x00\x4a\x00\x4b\x00\xd6\x00\x1c\x00\xc4\x00\xc5\x00\x1e\x00\xc7\x00\xc8\x00\x3f\x00\x1d\x00\x41\x00\xb7\x00\x43\x00\x22\x00\x45\x00\x46\x00\x47\x00\x2c\x00\x17\x00\x4a\x00\x4b\x00\xd6\x00\x2c\x00\x28\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x1d\x00\x43\x00\x73\x00\x45\x00\x46\x00\x47\x00\x17\x00\x73\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x1b\x00\x43\x00\x24\x00\x45\x00\x46\x00\x47\x00\x29\x00\x73\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x2b\x00\x43\x00\x5f\x00\x45\x00\x46\x00\x47\x00\x73\x00\x5b\x00\x4a\x00\x4b\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x3f\x00\xb7\x00\x41\x00\x22\x00\x43\x00\x22\x00\x45\x00\x46\x00\x47\x00\x94\x00\x95\x00\x96\x00\x24\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x94\x00\x95\x00\x96\x00\xb7\x00\x3b\x00\x3c\x00\x3d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x24\x00\x05\x00\xd6\x00\x1c\x00\x17\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x42\x00\x43\x00\xb7\x00\x45\x00\x46\x00\x47\x00\x50\x00\x51\x00\x52\x00\x4b\x00\x17\x00\x22\x00\x17\x00\xd6\x00\x21\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x17\x00\x42\x00\x43\x00\xb7\x00\x45\x00\x46\x00\x47\x00\x17\x00\x5e\x00\x5f\x00\x60\x00\x17\x00\x62\x00\xd6\x00\x17\x00\x17\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x17\x00\xb7\x00\x45\x00\x46\x00\x47\x00\x48\x00\x17\x00\x17\x00\x5e\x00\x5f\x00\x60\x00\x21\x00\x62\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x22\x00\xb7\x00\x2d\x00\x44\x00\x45\x00\x46\x00\x47\x00\x17\x00\x41\x00\x44\x00\x45\x00\x46\x00\x47\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x2b\x00\xb7\x00\x41\x00\x44\x00\x45\x00\x46\x00\x47\x00\x41\x00\x21\x00\x44\x00\x45\x00\x46\x00\x47\x00\xd6\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x61\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x27\x00\xb4\x00\x4b\x00\x2b\x00\x6d\x00\xb8\x00\x73\x00\x29\x00\xd6\x00\x28\x00\x20\x00\xc4\x00\xc5\x00\x22\x00\xc7\x00\xc8\x00\xb9\x00\xc4\x00\xc5\x00\x0f\x00\x17\x00\xc8\x00\x70\x00\x0c\x00\x64\x00\x2d\x00\x6b\x00\xc4\x00\xc5\x00\xd6\x00\xc7\x00\xc8\x00\x1d\x00\x09\x00\x84\x00\x0b\x00\x84\x00\xb9\x00\x0f\x00\x85\x00\x0f\x00\x0f\x00\x1d\x00\x0f\x00\x20\x00\xd6\x00\x1d\x00\x17\x00\xc4\x00\xc5\x00\x68\x00\xc7\x00\xc8\x00\x85\x00\x16\x00\x0c\x00\x5e\x00\x30\x00\x22\x00\x1d\x00\x28\x00\xbe\x00\x85\x00\x27\x00\x85\x00\xc2\x00\xd6\x00\xc4\x00\xc5\x00\x2d\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\x00\x00\x46\x00\xff\xff\x01\x00\x02\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\xd6\x00\xd7\x00\xd8\x00\xc4\x00\xc5\x00\xff\xff\xc7\x00\xc8\x00\xff\xff\xc4\x00\xc5\x00\xff\xff\xc7\x00\xc8\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\xff\xff\xd6\x00\xc4\x00\xc5\x00\xff\xff\xc7\x00\xc8\x00\xd6\x00\xc4\x00\xc5\x00\xff\xff\xc7\x00\xc8\x00\xb4\x00\x01\x00\x16\x00\x17\x00\xb8\x00\x05\x00\x06\x00\xd6\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xd6\x00\xff\xff\xff\xff\xc4\x00\xc5\x00\x26\x00\xff\xff\xc8\x00\xff\xff\x16\x00\x01\x00\x18\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x24\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x2f\x00\x30\x00\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\x74\x00\xff\xff\x7a\x00\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x09\x00\x74\x00\x61\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x01\x00\x18\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\x74\x00\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\xff\xff\xff\xff\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\x74\x00\xff\xff\x20\x00\xbb\x00\xff\xff\xff\xff\xbe\x00\xff\xff\xc0\x00\xff\xff\xc2\x00\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc9\x00\xca\x00\xcb\x00\x32\x00\xcd\x00\xff\xff\xcf\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\x01\x00\xff\xff\xff\xff\x61\x00\x05\x00\x06\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x08\x00\x09\x00\xff\xff\x01\x00\x16\x00\x74\x00\x18\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x32\x00\xff\xff\x74\x00\x24\x00\x25\x00\xbb\x00\xff\xff\x32\x00\xbe\x00\xff\xff\xc0\x00\xff\xff\xc2\x00\x7f\x00\x25\x00\xff\xff\x31\x00\x32\x00\x33\x00\xc9\x00\xca\x00\xcb\x00\x01\x00\xcd\x00\xff\xff\xcf\x00\x05\x00\x06\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x01\x00\xff\xff\xff\xff\x32\x00\xff\xff\x74\x00\x61\x00\xff\xff\xbb\x00\x7f\x00\xff\xff\xbe\x00\xff\xff\xc0\x00\x0f\x00\xc2\x00\x7f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xc9\x00\xca\x00\xcb\x00\x74\x00\xcd\x00\xff\xff\xcf\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\x74\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x4f\x00\xff\xff\x7f\x00\xff\xff\x53\x00\x54\x00\x55\x00\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x61\x00\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\x67\x00\x68\x00\xff\xff\x6a\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\xff\xff\x79\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x63\x00\xff\xff\x65\x00\x66\x00\x67\x00\x68\x00\xff\xff\x6a\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\xff\xff\x79\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x67\x00\x68\x00\xff\xff\x6a\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\xff\xff\x79\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x7e\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\x16\x00\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\x4f\x00\xff\xff\x2a\x00\xff\xff\x53\x00\x54\x00\x55\x00\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\x61\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\x60\x00\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\xff\xff\xff\xff\xff\xff\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2a\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\x57\x00\x03\x00\x04\x00\x05\x00\x06\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6a\x00\x16\x00\xff\xff\x18\x00\x6e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x20\x00\x21\x00\xff\xff\xff\xff\xff\xff\x7a\x00\x7b\x00\x7c\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\x61\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x01\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x16\x00\xff\xff\x65\x00\x66\x00\x67\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\x25\x00\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\x74\x00\xff\xff\xff\xff\x01\x00\x02\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x16\x00\xff\xff\xff\xff\x65\x00\x66\x00\x67\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\x26\x00\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\x01\x00\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\x16\x00\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x67\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x61\x00\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x65\x00\x66\x00\x67\x00\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x74\x00\x75\x00\x76\x00\x77\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\x16\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\x6a\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\x26\x00\x71\x00\xff\xff\xff\xff\x74\x00\x75\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\x32\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\x01\x00\x02\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x57\x00\xff\xff\x59\x00\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\x16\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1e\x00\xff\xff\x6a\x00\xff\xff\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x71\x00\xff\xff\xff\xff\x74\x00\x75\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\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x23\x00\x24\x00\x25\x00\xff\xff\x27\x00\x28\x00\x29\x00\xff\xff\x2b\x00\x01\x00\xff\xff\xff\xff\x2f\x00\x05\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x16\x00\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x42\x00\x43\x00\x44\x00\x05\x00\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x2d\x00\xff\xff\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x07\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\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\x74\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x91\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x07\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xb3\x00\x48\x00\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xd0\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\x74\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x91\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x07\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xb3\x00\x48\x00\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xd0\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\x74\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x88\x00\x89\x00\x8a\x00\x8b\x00\x20\x00\xff\xff\xff\xff\x23\x00\xff\xff\x91\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\xff\xff\x07\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xb3\x00\x48\x00\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xd0\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\x01\x00\xff\xff\xff\xff\x74\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x23\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x38\x00\xff\xff\xff\xff\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\xff\xff\x42\x00\x43\x00\x44\x00\xff\xff\x46\x00\xff\xff\x48\x00\x74\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\x09\x00\xff\xff\x0b\x00\x61\x00\xff\xff\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x74\x00\x20\x00\x05\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\x27\x00\xff\xff\x22\x00\xff\xff\x24\x00\x25\x00\x2d\x00\x27\x00\x28\x00\xff\xff\xff\xff\x16\x00\x17\x00\xff\xff\xff\xff\xff\xff\x01\x00\x31\x00\x32\x00\x33\x00\x05\x00\x06\x00\xff\xff\x08\x00\x09\x00\xff\xff\x0b\x00\x26\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x20\x00\x61\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\x5f\x00\xff\xff\x61\x00\xff\xff\x2d\x00\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\xff\xff\x74\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x61\x00\x08\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x01\x00\x74\x00\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x20\x00\x61\x00\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x16\x00\x2f\x00\x18\x00\x19\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\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\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x17\x00\x18\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\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\x74\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\x01\x00\xff\xff\x03\x00\x04\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x5f\x00\x20\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x5f\x00\x20\x00\x61\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x24\x00\x25\x00\xff\xff\x27\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x22\x00\xff\xff\x31\x00\x32\x00\x33\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x74\x00\xff\xff\x5e\x00\xff\xff\xff\xff\x61\x00\xff\xff\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\x68\x00\xff\xff\xff\xff\x16\x00\x01\x00\x18\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\x74\x00\x20\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x24\x00\x25\x00\x16\x00\x27\x00\x18\x00\xff\xff\x30\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\x20\x00\x31\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\x6b\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\xff\xff\x05\x00\x06\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x61\x00\x05\x00\x06\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x74\x00\x18\x00\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x06\x00\x74\x00\x01\x00\x02\x00\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x61\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6b\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x74\x00\x01\x00\x02\x00\xff\xff\xff\xff\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x01\x00\x02\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x16\x00\x01\x00\xff\xff\xff\xff\x61\x00\x05\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x61\x00\x05\x00\x06\x00\xff\xff\xff\xff\xff\xff\xff\xff\x68\x00\xff\xff\xff\xff\xff\xff\x16\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x16\x00\xff\xff\xff\xff\x05\x00\x61\x00\xff\xff\x01\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x61\x00\x16\x00\x01\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x74\x00\xff\xff\xff\xff\x61\x00\x16\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x61\x00\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\x74\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x61\x00\xff\xff\xff\xff\xff\xff\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\x61\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\x91\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xff\xff\xa1\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xff\xff\x24\x00\x25\x00\xff\xff\x27\x00\x28\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9d\x00\x9e\x00\x9f\x00\xff\xff\xa1\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\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\x9e\x00\x9f\x00\xff\xff\xa1\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\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\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xab\x00\xff\xff\xad\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xab\x00\xff\xff\xad\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\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\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\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\xa0\x00\xa1\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xab\x00\xff\xff\xad\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xab\x00\xff\xff\xad\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\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\xa1\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\xff\xff\xff\xff\x90\x00\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xbc\x00\xff\xff\xbe\x00\xff\xff\xff\xff\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\x8d\x00\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9a\x00\x9b\x00\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\x8d\x00\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xbc\x00\xff\xff\xbe\x00\xff\xff\xff\xff\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xff\xff\xcc\x00\xff\xff\xce\x00\xcf\x00\xd0\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xbc\x00\xff\xff\xbe\x00\xff\xff\xff\xff\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xff\xff\xcc\x00\xff\xff\xce\x00\xcf\x00\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\x8d\x00\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\x8d\x00\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xbc\x00\xff\xff\xbe\x00\xff\xff\xff\xff\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xff\xff\xcc\x00\xff\xff\xce\x00\xcf\x00\xd0\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xbc\x00\xff\xff\xbe\x00\xff\xff\xff\xff\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xff\xff\xcc\x00\xff\xff\xce\x00\xcf\x00\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\x8d\x00\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xbc\x00\xff\xff\xbe\x00\xff\xff\xff\xff\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xff\xff\xcc\x00\xff\xff\xce\x00\xcf\x00\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xa4\x00\xa5\x00\xff\xff\x91\x00\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xa5\x00\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x90\x00\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\x8f\x00\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xa9\x00\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xd0\x00\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\xd0\x00\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x83\x00\x84\x00\x85\x00\x86\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\x84\x00\xff\xff\x86\x00\xff\xff\xd0\x00\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\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\x88\x00\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xd0\x00\x91\x00\xff\xff\xff\xff\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\x94\x00\x95\x00\x96\x00\xff\xff\x98\x00\x99\x00\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xb3\x00\xff\xff\xd0\x00\xb6\x00\xb7\x00\x91\x00\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xd0\x00\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xd0\x00\xb6\x00\xb7\x00\xff\xff\xb9\x00\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xb3\x00\xff\xff\xd0\x00\xb6\x00\xb7\x00\x91\x00\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xd0\x00\xff\xff\xff\xff\x91\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xd0\x00\xb6\x00\xb7\x00\xff\xff\xb9\x00\x89\x00\x8a\x00\x8b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x91\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xb3\x00\xff\xff\xff\xff\xb6\x00\xb7\x00\xff\xff\xb9\x00\xd0\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xb3\x00\xff\xff\xd0\x00\xb6\x00\xb7\x00\xff\xff\xb9\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xd0\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"# + +happyTable :: HappyAddr +happyTable = HappyA# "\x00\x00\x86\x00\x0f\x02\x87\x00\x07\x00\x09\x00\x1f\x03\x20\x03\x21\x03\x94\x00\xb4\x02\x65\x01\x15\x04\xe1\x02\x87\x01\x67\x01\xff\x01\xbc\x02\x94\x00\xb9\x01\x67\x01\xee\x02\xe2\x02\x0c\x04\x16\x04\x17\x04\x94\x00\x51\x02\x21\x04\xc0\x03\x41\x02\x1c\x04\x94\x00\xea\x02\xe5\x03\xbd\x03\x95\x00\x67\x01\xee\x02\x29\x02\x06\x04\xc0\x02\x67\x01\xff\x01\x00\x02\x0e\x04\x74\x03\xc0\x02\x67\x01\xf6\x02\xbf\x02\xc0\x02\x40\x02\x67\x01\xf6\x02\x50\x01\xcc\x00\x29\x02\xd0\x00\x67\x01\x44\x03\x29\x02\xf1\x03\x29\x02\xec\x01\x67\x01\x6d\x03\xbe\xff\xc7\x03\xbf\x03\xc0\x03\x02\x02\x67\x01\x6d\x03\x52\x02\xe8\x01\x3a\x01\xa8\x00\x54\x02\xaa\x00\x6e\x01\x32\x03\x01\x03\xd7\x02\x92\x01\x93\x01\xc8\x03\x8c\x00\x60\x03\x8d\x00\x1f\x04\xcd\x00\xa8\x00\xd7\x02\x55\x03\xcd\x00\x3b\x01\xcd\x00\xd7\x00\x04\x04\xd8\x02\x8b\x01\x01\x04\x00\x03\x01\x03\xb9\x01\xe5\x02\xad\x00\x3c\x01\x51\x01\xe9\x01\x6f\x01\xbd\x02\x18\x00\x14\x03\x15\x03\xa1\x00\xa2\x00\xd8\x00\x62\x03\x67\x01\x44\x03\x56\x03\xee\x01\x8e\x00\xee\x01\xf9\x03\x2c\x00\xba\x01\x2d\x00\x7d\x03\x16\x03\xc1\x01\xc2\x01\x2f\x00\xec\x02\x26\x04\xb5\x03\x30\x00\x94\x01\x31\x00\x6e\x03\x13\x04\xb4\x02\x40\x00\x18\x00\xf3\x03\xff\x03\x6f\x03\x2c\x00\x56\x02\x2d\x00\xf7\x02\xb6\x03\xc1\x01\xc2\x01\x2f\x00\xf8\x02\x45\x03\xf6\xfe\x30\x00\xaf\x02\x31\x00\x55\x02\xc1\x02\xb0\x02\x88\x01\xb1\x02\xed\x01\x89\x01\xc1\x02\x8a\x01\xef\x02\x22\x03\xc1\x02\x96\x00\x23\x03\x18\x04\x56\x02\xc1\x03\x01\x02\x19\x04\x8b\x01\xc2\x03\x96\x00\x8c\x01\x3e\x00\x14\x00\x3f\x00\xf0\x02\x40\x00\x18\x00\x96\x00\x14\x00\xbb\x00\x14\x00\xbb\x00\xbc\x00\x96\x00\xbc\x00\x22\x03\xf4\x03\x10\x02\x23\x03\x24\x03\x66\x01\x66\x01\x03\x02\x55\x02\x1a\x04\x08\x00\x08\x00\x08\x00\x3e\x00\x14\x00\x3f\x00\x32\x00\x40\x00\x18\x00\x46\x03\xc1\x03\x14\x00\x02\x03\x56\x02\xc2\x03\x83\x01\x33\x00\xef\x01\x34\x00\xf4\x01\x35\x00\x24\x03\xdd\x02\x36\x00\x37\x00\x38\x00\x14\x00\xbb\x00\x32\x00\xaf\x01\xbc\x00\x39\x00\x18\x04\x14\x00\x02\x03\x80\x01\x19\x04\xde\x03\x33\x00\xc1\x03\x34\x00\xdf\x03\x35\x00\xc2\x03\x7b\x01\x36\x00\x37\x00\x38\x00\x14\x00\xbb\x00\x88\x03\x93\x02\xbc\x00\x39\x00\x73\x01\x14\x00\xbb\x00\xe0\x03\xc9\x00\xbc\x00\x0d\x00\x0e\x00\x0f\x00\x95\x01\x1a\x04\x3a\x00\x06\x01\x0f\x00\x3b\x00\x3c\x00\xa1\x02\x3d\x00\x14\x04\x5d\x03\x0e\x00\x0f\x00\x3e\x00\x14\x00\x3f\x00\x00\x04\xa7\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\xa2\x02\xd7\x02\x3b\x00\x3c\x00\x2c\x03\x3d\x00\x41\x00\xba\x03\x8f\x01\x2d\x03\x1b\x00\xfe\x03\xf2\x03\x89\x03\x8a\x03\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xac\x00\xff\x03\x9c\x02\x16\x00\x2c\x00\x90\x01\x2d\x00\x41\x00\xc0\x01\xc1\x01\xc2\x01\x2f\x00\xaf\x00\xb0\x00\xb1\x00\x30\x00\xd4\x02\x31\x00\xcf\x01\x56\x01\x0e\x00\x0f\x00\x7e\x01\x14\x00\x15\x00\xd6\x03\x81\x01\x7b\x03\x7c\x03\xdc\x02\x9d\x02\x9e\x02\x14\x00\xbb\x00\x2c\x00\x82\x01\x2d\x00\xd1\x03\xd2\x03\x7f\x01\x2c\x01\x84\x01\x0a\x00\xd0\x01\xd1\x01\xa0\x03\x0c\x00\x31\x00\x0d\x00\x0e\x00\x0f\x00\xd7\x03\x88\x02\x49\x01\x12\x00\xd2\x01\x4f\x01\x96\x03\xe0\x01\x14\x00\x15\x00\x77\x03\xc9\x00\x2c\x01\x0d\x00\x0e\x00\x0f\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xa8\x01\x95\x01\xda\x02\xf5\x02\x14\x00\x15\x00\x88\x03\x17\x00\x18\x00\x14\x00\x15\x00\x2b\x00\x17\x00\x18\x00\x3e\x00\x14\x00\x3f\x00\x14\x00\x15\x00\x32\x00\x17\x00\x18\x00\x19\x00\x7a\x01\xe3\x03\xe4\x03\x93\x02\x07\x01\xab\x01\x33\x00\x2c\x00\x34\x00\x94\x02\x35\x00\x7b\x01\x19\x00\x36\x00\x37\x00\x38\x00\x2c\x01\xa1\x03\xa2\x03\xa3\x03\x2c\x00\x39\x00\x2d\x00\xb0\x01\x79\x03\x4d\x01\x32\x00\x7d\x03\x14\x00\x15\x00\x23\x02\x24\x02\x7b\x01\x31\x00\x2c\x01\xed\x03\x33\x00\x91\x03\x34\x00\x92\x03\x35\x00\x40\x00\x18\x00\x36\x00\x37\x00\x38\x00\xa7\x02\x1e\x00\x1f\x00\x14\x00\x15\x00\x39\x00\x17\x00\x18\x00\x2b\x01\x3a\x00\x4b\x02\x4c\x02\x3b\x00\x3c\x00\x43\x03\x3d\x00\x74\x01\x2c\x01\x7f\x03\x13\x00\xc9\x00\x19\x00\x0d\x00\x0e\x00\x0f\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xa4\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xb5\x01\x41\x00\x3a\x00\x8d\x02\xb6\x01\x3b\x00\x3c\x00\x8e\x02\x3d\x00\xb7\x01\xa6\x03\x14\x00\x15\x00\x19\x00\x17\x00\x18\x00\x1e\x00\x1f\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x9e\x03\xa7\x00\x32\x00\xa9\x00\x2c\x00\x19\x00\x2d\x00\x41\x00\xef\x01\xbf\x02\x95\x01\xf0\x01\x33\x00\xb1\x03\x34\x00\xa0\x03\x35\x00\x31\x00\xaf\x03\x36\x00\x37\x00\x38\x00\xb4\x03\x3e\x00\x14\x00\x3f\x00\x2c\x00\x39\x00\x2d\x00\xa8\x01\xac\x00\x86\x02\xe6\x02\x2f\x00\xb8\x03\x1e\x00\x1f\x00\x30\x00\xc3\x01\x31\x00\x9c\x03\x9d\x03\xaf\x00\xb0\x00\xb1\x00\xa1\x00\xa2\x00\x19\x03\xa7\x03\xe0\x01\x14\x00\xa3\x02\x7f\x03\xc9\x00\xa4\x02\x0d\x00\x0e\x00\x0f\x00\x29\x02\x25\x02\x26\x02\x3a\x00\xa9\x03\xaa\x03\x3b\x00\x27\x02\x36\x03\x3d\x00\x76\x01\x31\x01\x47\x03\xa4\x00\xc9\x00\xa5\x00\x0d\x00\x0e\x00\x0f\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x1b\x03\x1c\x03\xf2\x03\xa3\x03\x50\x03\x14\x00\x15\x00\x41\x00\x17\x00\x18\x00\x32\x00\xb0\x01\x14\x00\x3f\x00\x88\x01\x71\x01\x18\x00\x89\x01\xf0\x01\xb7\x02\x33\x00\xc5\x02\x34\x00\x19\x00\x35\x00\x2c\x02\xb8\x00\x36\x00\x37\x00\x38\x00\x8b\x01\x70\x03\x32\x00\x8c\x01\x2c\x00\x39\x00\x2d\x00\x14\x00\x31\x03\xcc\x03\x2e\x00\x2f\x00\x33\x00\xbb\x02\x34\x00\x30\x00\x35\x00\x31\x00\xeb\x02\x36\x00\x37\x00\x38\x00\x3e\x00\x14\x00\x3f\x00\xcd\x03\xce\x03\x39\x00\xcf\x03\xd8\x02\xc9\x00\x11\x03\x0d\x00\x0e\x00\x0f\x00\x2c\x00\x9e\x01\x2d\x00\xa8\x01\x3a\x00\xa9\x01\xf1\x02\x3b\x00\x3c\x00\x13\x03\x3d\x00\x2b\x03\x88\x00\x31\x00\x3e\x00\x14\x00\x3f\x00\x89\x00\x8a\x00\x15\x02\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x4b\x02\x42\x03\x3b\x00\x3c\x00\x17\x02\x3d\x00\x41\x00\x14\x00\x15\x00\xe4\x01\x17\x00\x18\x00\x1f\x02\x9c\x01\x9d\x01\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x9e\x01\x3e\x00\x14\x00\x3f\x00\x19\x00\x14\x00\x15\x00\x41\x00\x17\x00\x18\x00\x32\x00\x5a\x03\x96\x02\x3e\x00\x14\x00\x3f\x00\x62\x01\x63\x01\x64\x01\x65\x01\x33\x00\x20\x02\x34\x00\x19\x00\x35\x00\x07\x03\x08\x03\x36\x00\x37\x00\x38\x00\x30\x02\x38\x03\xb9\x00\x6b\x03\x9a\x02\x39\x00\xba\x00\xc3\x02\x9a\x02\x14\x00\x15\x00\x32\x00\x71\x01\x18\x00\x0f\x04\x10\x04\x11\x04\x31\x02\x14\x00\xbb\x00\x3d\x02\x33\x00\xbc\x00\x34\x00\x9b\x03\x35\x00\x9c\x03\x72\x01\x36\x00\x37\x00\x38\x00\x38\x03\xd6\xfe\x13\x00\xd6\xfe\x4d\xfe\x39\x00\x4d\xfe\xe9\x01\x3a\x00\x09\x03\x0a\x03\x3b\x00\x3c\x00\x3f\x02\x3d\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x3e\x00\x14\x00\x3f\x00\x43\x02\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xf9\x01\x14\x00\x3f\x00\x19\x00\x71\x01\x18\x00\x5f\xfe\x41\x00\x5f\xfe\x3a\x00\x0e\x03\x0f\x03\x3b\x00\x3c\x00\x69\xfe\x3d\x00\x69\xfe\x4a\x02\x39\x03\x3a\x03\x3b\x03\x3c\x03\x3d\x03\x6c\x02\xdb\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x6a\xfe\x3e\x03\x6a\xfe\x34\x00\x6b\xfe\x35\x00\x6b\xfe\x41\x00\x36\x00\x37\x00\x38\x00\xc4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\x39\x00\x47\x02\xc9\x03\x3b\x03\x3c\x03\x3d\x03\x6d\x02\x6e\x02\x3e\x00\x14\x00\x3f\x00\x94\x03\x5f\x00\xbd\x03\x60\x00\x3e\x03\x4f\x02\x34\x00\x96\x03\x35\x00\xad\x02\x60\x01\x36\x00\x37\x00\x38\x00\x0a\x00\xa3\x01\xa4\x01\x59\x02\xc9\x00\x39\x00\x0d\x00\x0e\x00\x0f\x00\x3a\x00\x67\x01\xb2\x02\x3b\x00\x3c\x00\x6f\x02\x3d\x00\xff\x03\xda\x00\xdb\x00\x76\x02\xa7\x00\xa8\x00\xa9\x00\xaa\x00\x90\x02\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x67\x01\x68\x01\x94\x03\x5f\x00\x95\x03\x60\x00\x91\x02\x41\x00\x3a\x00\x96\x03\x9f\x02\x3b\x00\x3c\x00\x6c\x01\x3d\x00\xc8\x00\x35\x03\x37\x02\xac\x00\xc9\x00\xad\x00\x0d\x00\x0e\x00\x0f\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xaf\x00\xb0\x00\xb1\x00\x6c\xfe\x0a\x00\x6c\xfe\x0b\x00\x41\x00\x0c\x00\x4b\x01\x0d\x00\x0e\x00\x0f\x00\xff\x02\x37\x02\x38\x02\x12\x00\x67\x01\x69\x01\x4c\x03\xe0\x01\xda\x03\xda\x00\xdb\x00\xc9\x00\xc5\x01\x0d\x00\x0e\x00\x0f\x00\x0d\x02\x8a\x00\x0a\x00\xb9\x00\x0b\x00\xc7\x01\x0c\x00\xba\x00\x0d\x00\x0e\x00\x0f\x00\x36\x02\x37\x02\x38\x02\x12\x00\x67\x01\x6a\x01\xdf\x01\xe0\x01\x14\x00\xbb\x00\xca\x01\xc9\x00\xbc\x00\x0d\x00\x0e\x00\x0f\x00\xbf\x00\xc0\x00\x0a\x00\x13\x00\x0b\x00\x6d\xfe\x0c\x00\x6d\xfe\x0d\x00\x0e\x00\x0f\x00\x1e\x03\x1f\x03\x38\x02\x12\x00\xc3\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xd4\x01\xa1\x00\xa2\x00\x31\x01\x0a\x00\xa4\x00\x0b\x00\xa5\x00\x0c\x00\xea\x01\x0d\x00\x0e\x00\x0f\x00\x19\x00\xcc\x01\x4d\x01\x12\x00\x4e\x01\x4f\x01\xc6\x02\x86\x03\x0a\x02\x0d\x00\x0e\x00\x0f\x00\x0a\x00\x6e\xfe\x0b\x00\x6e\xfe\x0c\x00\xc2\x00\x0d\x00\x0e\x00\x0f\x00\x5f\x01\x60\x01\x4d\x01\x12\x00\x4e\x01\x4f\x01\xc7\x00\x14\x00\x15\x00\x0e\x01\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x29\x01\x0c\x00\x87\x03\x0d\x00\x0e\x00\x0f\x00\x44\x01\xe9\x03\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x4b\x02\x4c\x02\x46\x01\x4d\x02\x4e\x02\x97\x03\x98\x03\x99\x03\x6f\xfe\x13\x00\x6f\xfe\x14\x00\x15\x00\x19\x00\x17\x00\x18\x00\x50\x01\x0b\x01\x88\x00\xea\x03\x0c\x01\x25\x04\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x1c\x00\x1d\x00\x19\x00\x3e\x00\x14\x00\x3f\x00\x21\x04\x40\x00\x18\x00\x13\x00\x50\x01\x14\x00\x15\x00\x19\x00\x17\x00\x18\x00\x81\x03\x1f\x04\x0d\x00\x0e\x00\x0f\x00\x1c\x04\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x1e\x04\x76\xfe\x19\x00\x76\xfe\x0a\x00\x13\x00\xe1\x01\x77\xfe\xc9\x00\x77\xfe\x0d\x00\x0e\x00\x0f\x00\x19\x00\x14\x04\x9b\x01\x5e\x03\x9c\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xa1\x00\xa2\x00\x0c\x04\x13\x00\x12\x02\x67\x01\x13\x02\x14\x00\x15\x00\x04\x04\x17\x00\x18\x00\x03\x04\x19\x00\x51\x01\xa1\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xa1\x00\xa2\x00\x06\x04\x13\x00\x19\x00\x0a\x04\x5d\x03\x0e\x00\x0f\x00\x75\x03\x99\x02\x9a\x02\xc3\x02\x19\x00\xa7\x00\xa8\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\xae\x01\x0b\x00\xaf\x01\x0c\x00\x0a\x04\x0d\x00\x0e\x00\x0f\x00\x0c\x02\x0d\x02\x49\x01\x12\x00\x19\x00\x71\x03\x14\x02\x67\x01\x13\x02\x9b\x01\x0a\x00\x9c\x01\x0b\x00\xac\x00\x0c\x00\x29\x02\x0d\x00\x0e\x00\x0f\x00\xe8\x02\xe9\x02\x49\x01\x12\x00\xf0\x03\x4a\x01\xaf\x00\xb0\x00\xb1\x00\x19\x02\x1a\x02\x0a\x00\x72\x03\x0b\x00\x92\x01\x0c\x00\x29\x02\x0d\x00\x0e\x00\x0f\x00\x59\xff\x07\x04\x11\x00\x12\x00\xf6\x03\x14\x00\x15\x00\xf7\x03\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xf9\x03\x0c\x00\xa1\x02\x0d\x00\x0e\x00\x0f\x00\xfb\x03\xe6\x03\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\xfc\x03\x0b\x00\xfd\x03\x0c\x00\xbc\x03\x0d\x00\x0e\x00\x0f\x00\xbf\x03\xf7\x03\x11\x00\x12\x00\x19\x00\x3c\x02\xc6\x03\x0d\x00\x0e\x00\x0f\x00\x4b\x01\x0a\x00\x29\x02\x0b\x00\xcc\x03\x0c\x00\x29\x02\x0d\x00\x0e\x00\x0f\x00\x78\x02\xc6\x03\x11\x00\x12\x00\xc9\x01\xca\x01\x14\x00\x15\x00\x9b\x03\x17\x00\x18\x00\x0a\x00\xfd\xfd\x0b\x00\x13\x00\x0c\x00\xdc\x03\x0d\x00\x0e\x00\x0f\x00\xe3\x03\xca\x03\x11\x00\x12\x00\x19\x00\x0c\x02\x0d\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xe1\x03\x0c\x00\xe2\x03\x0d\x00\x0e\x00\x0f\x00\x77\x03\xab\x03\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x79\x03\x7b\x03\x13\x00\xa1\x02\x82\x01\x6f\x01\x80\x03\x0d\x00\x0e\x00\x0f\x00\x94\x02\x95\x02\x96\x02\x19\x00\x85\x03\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x1e\x00\x0c\x00\x8d\x03\x0d\x00\x0e\x00\x0f\x00\x8e\x03\xd3\x02\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xe0\x02\x0c\x00\xc4\x00\x0d\x00\x0e\x00\x0f\x00\x07\x03\xfb\x02\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xa0\x03\xad\x03\x13\x00\xaf\x03\xb1\x03\x14\x00\x15\x00\xb3\x03\x17\x00\x18\x00\x98\x02\x99\x02\x9a\x02\x19\x00\x29\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xb4\x03\xb8\x03\x13\x00\x19\x00\xe7\x03\x5d\x03\x0e\x00\x0f\x00\xa9\x02\x99\x02\x9a\x02\xba\x03\x28\x03\x19\x00\x1b\x03\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x2b\x03\x0b\x00\x13\x00\x0c\x00\x29\x02\x0d\x00\x0e\x00\x0f\x00\x31\x03\x3b\x02\x11\x00\x12\x00\x19\x00\x29\x03\x38\x03\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x2a\x03\x0b\x00\x34\x03\x0c\x00\x35\x03\x0d\x00\x0e\x00\x0f\x00\x49\x03\x8e\x01\x11\x00\x12\x00\x19\x00\x4e\x03\x14\x00\x15\x00\x4f\x03\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x05\x02\x0c\x00\x57\x03\x0d\x00\x0e\x00\x0f\x00\x98\x02\x93\x01\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x5c\x03\x0c\x00\xfe\xfd\x0d\x00\x0e\x00\x0f\x00\x60\x03\xf8\x01\x11\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x67\x03\x0b\x00\x6d\x03\x0c\x00\xa1\x02\x0d\x00\x0e\x00\x0f\x00\x1e\x00\x0f\x01\x11\x00\x12\x00\x19\x00\x97\x01\x98\x01\x99\x01\xc3\x02\x33\xff\x0a\x00\xb6\x02\x0b\x00\xb7\x02\x0c\x00\xbb\x02\x0d\x00\x0e\x00\x0f\x00\xb9\x02\x10\x00\x11\x00\x12\x00\xa1\x02\x14\x00\x15\x00\xba\x02\x17\x00\x18\x00\x0a\x00\xc3\x02\x0b\x00\x13\x00\x0c\x00\xc5\x02\x0d\x00\x0e\x00\x0f\x00\xe0\x02\xd3\x02\xd0\x03\x12\x00\x19\x00\xae\x01\x98\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\xe1\x02\x0b\x00\x13\x00\x0c\x00\xe4\x02\x0d\x00\x0e\x00\x0f\x00\xe6\x02\x29\x02\xa6\x02\x12\x00\x19\x00\xea\x02\xee\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xf3\x02\xf4\x02\x13\x00\xf5\x02\xe8\x03\x5d\x03\x0e\x00\x0f\x00\xb7\x01\x98\x01\x99\x01\x05\x02\xfd\x02\x19\x00\xfe\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\xff\x02\x0c\x00\x06\x03\x0d\x00\x0e\x00\x0f\x00\x07\x03\x0c\x03\xa8\x02\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x0d\x03\x0c\x00\x0e\x03\x0d\x00\x0e\x00\x0f\x00\x11\x03\x8c\x00\xaa\x02\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x19\x03\x0c\x00\x1b\x02\x0d\x00\x0e\x00\x0f\x00\x17\x02\x22\x02\x70\x01\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x23\x02\x0c\x00\x2c\x02\x0d\x00\x0e\x00\x0f\x00\x2e\x02\x2f\x02\x75\x01\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\xc2\x00\x0b\x00\x13\x00\x0c\x00\x33\x02\x0d\x00\x0e\x00\x0f\x00\x34\x02\x35\x02\xce\x01\x12\x00\x19\x00\x36\x02\x92\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x3a\x02\x0b\x00\x3f\x02\x0c\x00\xcf\x00\x0d\x00\x0e\x00\x0f\x00\x3b\x02\x98\x00\xd3\x01\x12\x00\x19\x00\x45\x02\x14\x00\x15\x00\x46\x02\x17\x00\x18\x00\x0a\x00\x49\x02\x0b\x00\x13\x00\x0c\x00\x38\xff\x0d\x00\x0e\x00\x0f\x00\x47\x02\x4a\x02\xe5\x01\x12\x00\x19\x00\x23\xfe\x92\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x54\x02\x0c\x00\x51\x02\x0d\x00\x0e\x00\x0f\x00\xa7\x01\x78\x02\xcf\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x8b\x02\x0c\x00\x83\x02\x0d\x00\x0e\x00\x0f\x00\x8c\x02\x78\x02\xd4\x00\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x0b\x00\x9c\x01\x0c\x00\x98\x02\x0d\x00\x0e\x00\x0f\x00\x9f\x02\xa1\x02\x42\x01\x12\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x13\x00\x47\x01\xa6\x02\xc9\x00\xb2\x02\x0d\x00\x0e\x00\x0f\x00\x0e\x02\xda\x00\xdb\x00\xac\x02\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xd9\x00\xda\x00\xdb\x00\x13\x00\x2f\x02\xb7\x00\xb8\x00\xdc\x03\x5d\x03\x0e\x00\x0f\x00\xad\x02\x1e\x00\x19\x00\x6c\x01\x78\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xc6\x02\xc7\x02\x13\x00\x0d\x00\x0e\x00\x0f\x00\x5b\x02\x5c\x02\x5d\x02\xc8\x02\x79\x01\x7c\x01\x7d\x01\x19\x00\x83\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xcd\xfd\xc6\x02\x82\x03\x13\x00\x0d\x00\x0e\x00\x0f\x00\xcf\xfd\xc9\x02\xca\x02\xcb\x02\xce\xfd\xcc\x02\x19\x00\xd1\xfd\xd4\xfd\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xa6\x01\x13\x00\x56\x01\x0e\x00\x0f\x00\x57\x01\xa7\x01\xa8\x01\x83\x03\xca\x02\xcb\x02\xb4\x01\xcc\x02\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xb3\x01\x13\x00\xaf\x01\x80\x03\x5d\x03\x0e\x00\x0f\x00\xbc\x01\xbd\x01\x62\x03\x5d\x03\x0e\x00\x0f\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xbb\x01\x13\x00\xbf\x01\x85\x03\x5d\x03\x0e\x00\x0f\x00\xc0\x01\x49\x01\x5c\x03\x5d\x03\x0e\x00\x0f\x00\x19\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x63\x03\xbe\x00\xb6\x00\xb7\x00\xb8\x00\xc5\x01\xb9\x00\xc7\x01\xce\x01\xcc\x01\xba\x00\xd6\x01\xe4\x01\x19\x00\xe7\x01\xc4\x00\x14\x00\x15\x00\xf2\x01\x17\x00\x18\x00\xcd\x02\x14\x00\xbb\x00\xf3\x01\xfe\x01\xbc\x00\xff\x01\x0a\x02\x05\x02\x07\x02\x8e\x00\x14\x00\x15\x00\x19\x00\xce\x02\x18\x00\x12\x02\xa8\x00\x08\x02\xaa\x00\x09\x02\xcd\x02\x8f\x00\xff\xff\x90\x00\x91\x00\x98\x00\xc2\x00\xc4\x00\x19\x00\xcf\x00\x53\x01\x14\x00\x15\x00\xd2\x00\xce\x02\x18\x00\xff\xff\xd3\x00\x46\x01\xd4\x00\x56\x01\x2c\x01\x3d\x01\x55\x01\x58\x01\xff\xff\xad\x00\xff\xff\xa0\x00\x19\x00\x14\x00\x15\x00\x54\x01\x17\x00\x18\x00\xa1\x00\xa2\x00\xff\xff\x8c\x00\x00\x00\x1b\x00\x43\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x19\x00\x59\x01\x5a\x01\x14\x00\x15\x00\x00\x00\x17\x00\x18\x00\x00\x00\x14\x00\x15\x00\x00\x00\x17\x00\x18\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x19\x00\x14\x00\x15\x00\x00\x00\x17\x00\x18\x00\x19\x00\x14\x00\x15\x00\x00\x00\x17\x00\x18\x00\xb9\x00\x1b\x00\xbe\x00\x23\x04\xba\x00\x1e\x00\x1f\x00\x19\x00\x00\x00\x50\xff\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x14\x00\xbb\x00\x24\x04\x00\x00\xbc\x00\x00\x00\x20\x00\x1b\x00\x21\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x50\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x68\x03\x37\xff\x00\x00\x69\x03\x00\x00\x00\x00\x00\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x03\x00\x00\x2c\x00\x00\x00\x3e\x01\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x50\xff\x2c\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x1b\x00\x21\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x2c\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x50\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x03\x00\x00\x00\x00\xd0\x02\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x69\x03\x00\x00\x2c\x00\x00\x00\x22\x00\x9d\x00\x00\x00\x00\x00\x9e\x00\x00\x00\x3f\x01\x00\x00\xa0\x00\xed\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x00\xa2\x00\xa3\x00\xd1\x02\xa4\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x2b\x00\x1e\x00\x1f\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\xa7\x00\xa8\x00\x00\x00\x1b\x00\x20\x00\x2c\x00\x21\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x6a\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\x01\xd1\x02\x00\x00\x2c\x00\x8e\x01\xac\x00\x9d\x00\x00\x00\x65\x03\x9e\x00\x00\x00\xbd\x01\x00\x00\xa0\x00\xd2\x02\x6b\x03\x00\x00\xaf\x00\xb0\x00\xb1\x00\xa1\x00\xa2\x00\xa3\x00\x1b\x00\xa4\x00\x00\x00\xa5\x00\x1e\x00\x1f\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xd0\x02\x00\x00\x21\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x1b\x00\x00\x00\x00\x00\xd1\x02\x00\x00\x2c\x00\x2b\x00\x00\x00\x9d\x00\xd2\x02\x00\x00\x9e\x00\x00\x00\x9f\x00\x58\x02\xa0\x00\x66\x03\x00\x00\x00\x00\x00\x00\x00\x00\x59\x02\xa1\x00\xa2\x00\xa3\x00\x2c\x00\xa4\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x29\x02\x00\x00\x2c\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\xd2\x02\x00\x00\x27\x00\x28\x00\x29\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x2b\x00\x00\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x61\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x18\x03\x00\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x2c\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x73\x00\x74\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x18\x03\x00\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x2c\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x73\x00\x74\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x2c\x00\x6f\x00\x70\x00\x71\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x00\x73\x00\x74\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x24\x01\xa8\x00\xa9\x00\xaa\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x8a\x02\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x7b\x01\x51\x00\x26\x01\x27\x01\x00\x00\xad\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x28\x01\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x59\x02\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x24\x01\xa8\x00\xa9\x00\xaa\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\xad\x01\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x7b\x01\x51\x00\x26\x01\x27\x01\x00\x00\xad\x00\x23\x00\x00\x00\x7c\x00\x00\x00\x27\x00\x28\x00\x29\x00\x52\x00\x00\x00\x53\x00\x28\x01\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x2b\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x34\x01\xa8\x00\xa9\x00\xaa\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x35\x01\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x2c\x01\x51\x00\x26\x01\x36\x01\x00\x00\xad\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x37\x01\x38\x01\x39\x01\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x24\x01\xa8\x00\xa9\x00\xaa\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x25\x01\x00\x00\x51\x00\x26\x01\x27\x01\x00\x00\xad\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x28\x01\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x24\x01\xa8\x00\xa9\x00\xaa\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x26\x01\x27\x01\x00\x00\xad\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x28\x01\x29\x01\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\xdc\x01\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x01\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\xde\x01\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x29\x02\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x02\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x7e\x02\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x02\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\xdf\x02\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x02\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\x62\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x6c\x00\x20\x00\x00\x00\x21\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x22\x00\x49\x01\x00\x00\x00\x00\x00\x00\x82\x00\x83\x00\x84\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x29\x02\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x2b\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x1b\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\xa5\x03\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x86\x01\x00\x00\x68\x00\x69\x00\x6a\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x03\x87\x01\x00\x00\x2c\x00\x6f\x00\x70\x00\x71\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x1b\x00\x43\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\xa5\x03\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\xc6\x00\x00\x00\x00\x00\x68\x00\x69\x00\x6a\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x03\xa1\x01\x00\x00\x2c\x00\x6f\x00\x70\x00\x71\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x29\x02\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x1b\x00\x5f\x00\x00\x00\x60\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x04\x03\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x68\x00\x69\x00\x6a\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x2c\x00\x6f\x00\x70\x00\x71\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x2b\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x68\x00\x69\x00\x6a\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x2c\x00\x6f\x00\x70\x00\x71\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x29\x02\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x1b\x00\x43\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x40\x03\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x01\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\xa1\x01\x41\x03\x00\x00\x00\x00\x2c\x00\x42\x03\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x54\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x2c\x00\x00\x00\x1b\x00\x43\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x62\x00\x00\x00\x40\x03\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x03\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x03\x00\x00\x00\x00\x2c\x00\x42\x03\x62\x02\x43\x00\x1c\x00\x1d\x00\x63\x02\x1f\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x64\x02\x65\x02\x66\x02\x67\x02\x68\x02\x69\x02\x6a\x02\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\x6b\x02\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x6c\x02\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x00\x00\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x00\x00\x97\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x97\xfe\x00\x00\x00\x00\x97\xfe\x00\x00\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x00\x00\x97\xfe\x97\xfe\x97\xfe\x00\x00\x97\xfe\x1b\x00\x00\x00\x00\x00\x97\xfe\x1e\x00\x97\xfe\x97\xfe\x97\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x97\xfe\x00\x00\x00\x00\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\xbe\x00\x97\xfe\x97\xfe\x97\xfe\x00\x00\x97\xfe\x00\x00\x97\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x26\x03\x00\x00\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x97\xfe\x00\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\xfe\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\xfe\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x1b\x00\x5c\x00\x5d\x00\x5e\x00\x1e\x00\x5f\x00\x00\x00\x60\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xbe\x00\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\xfd\x01\x00\x00\x52\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\xdf\x00\x52\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\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\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x17\x01\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x39\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\xdf\x00\x52\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\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x3a\x00\x60\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\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\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x9b\x00\x9c\x00\x92\x00\x37\x00\x38\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x39\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\xdf\x00\x52\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\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x3a\x00\x60\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\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\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\xfb\x01\x92\x00\x37\x00\x38\x00\x50\x00\x00\x00\x00\x00\x51\x00\x00\x00\x39\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\xdf\x00\x52\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\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x3a\x00\x60\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\xff\x00\x00\x00\x00\x2c\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x1b\x00\x43\x00\x1c\x00\x1d\x00\x1e\x00\x1f\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\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x51\x00\x2e\xff\x2e\xff\x2e\xff\x2e\xff\x2e\xff\x2e\xff\x2e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\xff\x00\x00\x55\x00\x00\x00\x00\x00\x56\x00\x7e\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x00\x00\x5c\x00\x5d\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x2e\xff\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\xa8\x00\x00\x00\xaa\x00\x2b\x00\x00\x00\x00\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x20\x00\x53\x01\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x2c\x00\x22\x00\x1e\x00\x2c\x01\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00\x00\x41\x01\x00\x00\xab\x00\xac\x00\x54\x01\xad\x00\x42\x01\x00\x00\x00\x00\xbe\x00\xc4\x03\x00\x00\x00\x00\x00\x00\x1b\x00\xaf\x00\xb0\x00\xb1\x00\x1e\x00\x1f\x00\x00\x00\x5c\x01\xa8\x00\x00\x00\xaa\x00\xc5\x03\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x5d\x01\x00\x00\x00\x00\xad\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x5e\x01\x00\x00\x5f\x01\x37\xff\x00\x00\x00\x00\x00\x00\x2c\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x2b\x00\x5c\x01\xa8\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x1b\x00\x2c\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x5d\x01\x00\x00\x00\x00\xad\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x01\x20\x00\xe3\x01\x21\x00\x4d\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x2c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x74\x03\x21\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x01\x1b\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x20\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2a\x00\x22\x00\x2b\x00\x00\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\x00\x00\x00\x00\x1b\x00\x43\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x0e\x01\xab\x00\xac\x00\x00\x00\xad\x00\xa9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x26\x03\x00\x00\xaf\x00\xb0\x00\xb1\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x2c\x00\x00\x00\xcb\x00\x00\x00\x00\x00\x2b\x00\x00\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x20\x00\x1b\x00\x21\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x2c\x00\x22\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\xab\x00\xac\x00\x20\x00\xad\x00\x21\x00\x00\x00\x36\xff\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x22\x00\xaf\x00\xb0\x00\xb1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x03\x00\x00\x00\x00\x1b\x00\x43\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x0e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x2b\x00\x1e\x00\x1f\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x2c\x00\x21\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x2c\x00\x1b\x00\x43\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x09\x01\x00\x00\x0a\x01\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x2b\x00\x00\x00\x0b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x27\x03\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x2c\x00\x1b\x00\x43\x00\x00\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x01\x1b\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xc6\x00\x1b\x00\x00\x00\x00\x00\x2b\x00\x1e\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x2b\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x43\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\xc6\x00\x00\x00\x00\x00\x1e\x00\x2b\x00\x00\x00\x1b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2b\x00\xd6\x02\x1b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2b\x00\x04\x03\x1b\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2b\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x2b\x00\x70\x02\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x39\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x02\x79\x02\x7a\x02\x7b\x02\x00\x00\x7c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\xac\x00\x00\x00\xad\x00\xae\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x70\x02\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x03\x7a\x02\x7b\x02\x00\x00\x7c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x70\x02\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x03\x7b\x02\x00\x00\x7c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x70\x02\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x03\x72\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xd6\x01\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00\xfa\x02\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xd6\x01\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00\x42\x02\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x70\x02\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x02\x72\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x70\x02\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x02\x72\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xd6\x01\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00\xd9\x01\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xd6\x01\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00\xde\x01\x00\x00\xda\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x70\x02\xd7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x08\x04\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\xee\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xd4\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x8e\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x8f\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x90\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xad\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x2e\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x51\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x58\x03\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xdd\x02\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\xf9\x02\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x8f\x02\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x99\x00\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x12\x01\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x13\x01\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x84\x00\x85\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x2c\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x2d\x01\x2e\x01\x00\x00\x00\x00\x2f\x01\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x1d\x01\x00\x00\x1e\x01\x00\x00\x00\x00\x1f\x01\x30\x01\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xa1\x00\xa2\x00\x31\x01\x20\x01\xa4\x00\x21\x01\x32\x01\x41\x00\x19\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x1a\x01\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x01\x1c\x01\x00\x00\x7f\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x80\x02\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x1e\x01\x00\x00\x00\x00\x1f\x01\xa0\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xa1\x00\xa2\x00\x00\x00\x20\x01\x00\x00\x21\x01\x22\x01\x41\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x1e\x01\x00\x00\x00\x00\x1f\x01\xa0\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xa1\x00\xa2\x00\x00\x00\x20\x01\x00\x00\x21\x01\x22\x01\x41\x00\x19\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x81\x02\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x88\x02\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x1e\x01\x00\x00\x00\x00\x1f\x01\xa0\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xa1\x00\xa2\x00\x00\x00\x20\x01\x00\x00\x21\x01\x22\x01\x41\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x1e\x01\x00\x00\x00\x00\x1f\x01\xa0\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xa1\x00\xa2\x00\x00\x00\x20\x01\x00\x00\x21\x01\x22\x01\x41\x00\x19\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\xab\x01\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x1e\x01\x00\x00\x00\x00\x1f\x01\xa0\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\xa1\x00\xa2\x00\x00\x00\x20\x01\x00\x00\x21\x01\x22\x01\x41\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x49\x03\x4a\x03\x00\x00\x39\x00\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\xd3\x03\x00\x00\x00\x00\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xd8\x03\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\xd9\x03\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x84\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x02\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x14\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x15\x01\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x0d\x04\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x2f\x03\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x57\x03\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\xd9\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x1b\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x1c\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x1d\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x1e\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x29\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x2a\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x75\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x7e\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x83\x02\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\xf4\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xf5\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\xf6\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xf7\x01\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x98\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\xd5\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x75\x00\x76\x00\x77\x00\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x04\x03\x76\x00\x11\x01\x78\x00\x34\x00\x79\x00\x35\x00\x41\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x01\x76\x00\x11\x01\x78\x00\x34\x00\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x10\x01\x76\x00\x11\x01\x78\x00\x34\x00\x79\x00\x35\x00\x41\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x01\x96\x01\x79\x00\x35\x00\x00\x00\x00\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x96\x01\x00\x00\x35\x00\x00\x00\x41\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x92\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x5d\x02\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x39\x00\x00\x00\x00\x00\x5e\x02\xda\x00\xdb\x00\x00\x00\x5f\x02\x12\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x02\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x5e\x02\xda\x00\xdb\x00\x00\x00\x5f\x02\x60\x02\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x4f\x03\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\xa1\x01\x37\x00\x38\x00\x3a\x00\x00\x00\x41\x00\x3b\x00\x3c\x00\x39\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\xa2\x01\x37\x00\x38\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x3d\x01\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x41\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x05\x02\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x9a\x00\x37\x00\x38\x00\x3a\x00\x00\x00\x41\x00\x3b\x00\x3c\x00\x39\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x16\x01\x37\x00\x38\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x18\x01\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x41\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x3d\x01\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x3a\x00\x00\x00\x00\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x41\x00\x3b\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x14\x00\x3f\x00\x16\x00\x40\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# + +happyReduceArr = Happy_Data_Array.array (6, 588) [ + (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), + (449 , happyReduce_449), + (450 , happyReduce_450), + (451 , happyReduce_451), + (452 , happyReduce_452), + (453 , happyReduce_453), + (454 , happyReduce_454), + (455 , happyReduce_455), + (456 , happyReduce_456), + (457 , happyReduce_457), + (458 , happyReduce_458), + (459 , happyReduce_459), + (460 , happyReduce_460), + (461 , happyReduce_461), + (462 , happyReduce_462), + (463 , happyReduce_463), + (464 , happyReduce_464), + (465 , happyReduce_465), + (466 , happyReduce_466), + (467 , happyReduce_467), + (468 , happyReduce_468), + (469 , happyReduce_469), + (470 , happyReduce_470), + (471 , happyReduce_471), + (472 , happyReduce_472), + (473 , happyReduce_473), + (474 , happyReduce_474), + (475 , happyReduce_475), + (476 , happyReduce_476), + (477 , happyReduce_477), + (478 , happyReduce_478), + (479 , happyReduce_479), + (480 , happyReduce_480), + (481 , happyReduce_481), + (482 , happyReduce_482), + (483 , happyReduce_483), + (484 , happyReduce_484), + (485 , happyReduce_485), + (486 , happyReduce_486), + (487 , happyReduce_487), + (488 , happyReduce_488), + (489 , happyReduce_489), + (490 , happyReduce_490), + (491 , happyReduce_491), + (492 , happyReduce_492), + (493 , happyReduce_493), + (494 , happyReduce_494), + (495 , happyReduce_495), + (496 , happyReduce_496), + (497 , happyReduce_497), + (498 , happyReduce_498), + (499 , happyReduce_499), + (500 , happyReduce_500), + (501 , happyReduce_501), + (502 , happyReduce_502), + (503 , happyReduce_503), + (504 , happyReduce_504), + (505 , happyReduce_505), + (506 , happyReduce_506), + (507 , happyReduce_507), + (508 , happyReduce_508), + (509 , happyReduce_509), + (510 , happyReduce_510), + (511 , happyReduce_511), + (512 , happyReduce_512), + (513 , happyReduce_513), + (514 , happyReduce_514), + (515 , happyReduce_515), + (516 , happyReduce_516), + (517 , happyReduce_517), + (518 , happyReduce_518), + (519 , happyReduce_519), + (520 , happyReduce_520), + (521 , happyReduce_521), + (522 , happyReduce_522), + (523 , happyReduce_523), + (524 , happyReduce_524), + (525 , happyReduce_525), + (526 , happyReduce_526), + (527 , happyReduce_527), + (528 , happyReduce_528), + (529 , happyReduce_529), + (530 , happyReduce_530), + (531 , happyReduce_531), + (532 , happyReduce_532), + (533 , happyReduce_533), + (534 , happyReduce_534), + (535 , happyReduce_535), + (536 , happyReduce_536), + (537 , happyReduce_537), + (538 , happyReduce_538), + (539 , happyReduce_539), + (540 , happyReduce_540), + (541 , happyReduce_541), + (542 , happyReduce_542), + (543 , happyReduce_543), + (544 , happyReduce_544), + (545 , happyReduce_545), + (546 , happyReduce_546), + (547 , happyReduce_547), + (548 , happyReduce_548), + (549 , happyReduce_549), + (550 , happyReduce_550), + (551 , happyReduce_551), + (552 , happyReduce_552), + (553 , happyReduce_553), + (554 , happyReduce_554), + (555 , happyReduce_555), + (556 , happyReduce_556), + (557 , happyReduce_557), + (558 , happyReduce_558), + (559 , happyReduce_559), + (560 , happyReduce_560), + (561 , happyReduce_561), + (562 , happyReduce_562), + (563 , happyReduce_563), + (564 , happyReduce_564), + (565 , happyReduce_565), + (566 , happyReduce_566), + (567 , happyReduce_567), + (568 , happyReduce_568), + (569 , happyReduce_569), + (570 , happyReduce_570), + (571 , happyReduce_571), + (572 , happyReduce_572), + (573 , happyReduce_573), + (574 , happyReduce_574), + (575 , happyReduce_575), + (576 , happyReduce_576), + (577 , happyReduce_577), + (578 , happyReduce_578), + (579 , happyReduce_579), + (580 , happyReduce_580), + (581 , happyReduce_581), + (582 , happyReduce_582), + (583 , happyReduce_583), + (584 , happyReduce_584), + (585 , happyReduce_585), + (586 , happyReduce_586), + (587 , happyReduce_587), + (588 , happyReduce_588) + ] + +happy_n_terms = 134 :: Int +happy_n_nonterms = 217 :: Int + +happyReduce_6 = happyMonadReduce 2# 0# happyReduction_6 +happyReduction_6 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut11 happy_x_1 of { happy_var_1 -> + case happyOut10 happy_x_2 of { happy_var_2 -> + ( checkPageModule happy_var_2 happy_var_1)}} + ) (\r -> happyReturn (happyIn9 r)) + +happyReduce_7 = happyMonadReduce 5# 0# happyReduction_7 +happyReduction_7 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut11 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 XCodeTagOpen) -> + case happyOut15 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 XCodeTagClose) -> + case happyOut10 happy_x_5 of { happy_var_5 -> + ( let (os,ss,l) = happy_var_1 in checkHybridModule happy_var_5 (happy_var_3 os ss l) happy_var_2 happy_var_4)}}}}} + ) (\r -> happyReturn (happyIn9 r)) + +happyReduce_8 = happySpecReduce_2 0# happyReduction_8 +happyReduction_8 happy_x_2 + happy_x_1 + = case happyOut11 happy_x_1 of { happy_var_1 -> + case happyOut15 happy_x_2 of { happy_var_2 -> + happyIn9 + (let (os,ss,l) = happy_var_1 in happy_var_2 os ss l + )}} + +happyReduce_9 = happyMonadReduce 9# 1# happyReduction_9 +happyReduction_9 (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 happyOutTok happy_x_1 of { (Loc happy_var_1 XStdTagOpen) -> + case happyOut157 happy_x_2 of { happy_var_2 -> + case happyOut160 happy_x_3 of { happy_var_3 -> + case happyOut162 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 XStdTagClose) -> + case happyOut155 happy_x_6 of { happy_var_6 -> + case happyOutTok happy_x_7 of { (Loc happy_var_7 XCloseTagOpen) -> + case happyOut157 happy_x_8 of { happy_var_8 -> + case happyOutTok happy_x_9 of { (Loc happy_var_9 XStdTagClose) -> + ( do { n <- checkEqNames happy_var_2 happy_var_8; + let { cn = reverse happy_var_6; + as = reverse happy_var_3; }; + return $ XTag (happy_var_1 <^^> happy_var_9 <** [happy_var_1,happy_var_5,happy_var_7,happy_var_9]) n as happy_var_4 cn })}}}}}}}}} + ) (\r -> happyReturn (happyIn10 r)) + +happyReduce_10 = happyReduce 5# 1# happyReduction_10 +happyReduction_10 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 XStdTagOpen) -> + case happyOut157 happy_x_2 of { happy_var_2 -> + case happyOut160 happy_x_3 of { happy_var_3 -> + case happyOut162 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 XEmptyTagClose) -> + happyIn10 + (XETag (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_5]) happy_var_2 (reverse happy_var_3) happy_var_4 + ) `HappyStk` happyRest}}}}} + +happyReduce_11 = happySpecReduce_3 2# happyReduction_11 +happyReduction_11 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut218 happy_x_1 of { happy_var_1 -> + case happyOut12 happy_x_2 of { happy_var_2 -> + case happyOut219 happy_x_3 of { happy_var_3 -> + happyIn11 + (let (os,ss,ml) = happy_var_2 in (os,happy_var_1:ss++[happy_var_3],happy_var_1 <^^> happy_var_3) + )}}} + +happyReduce_12 = happySpecReduce_3 3# happyReduction_12 +happyReduction_12 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut13 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 SemiColon) -> + case happyOut12 happy_x_3 of { happy_var_3 -> + happyIn12 + (let (os,ss,ml) = happy_var_3 in (happy_var_1 : os, happy_var_2 : ss, Just $ ann happy_var_1 <++> nIS happy_var_2 <+?> ml) + )}}} + +happyReduce_13 = happySpecReduce_0 3# happyReduction_13 +happyReduction_13 = happyIn12 + (([],[],Nothing) + ) + +happyReduce_14 = happyReduce 4# 4# happyReduction_14 +happyReduction_14 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LANGUAGE) -> + case happyOut14 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 PragmaEnd) -> + happyIn13 + (LanguagePragma (happy_var_1 <^^> happy_var_4 <** (happy_var_1:reverse (snd happy_var_2) ++ reverse happy_var_3 ++ [happy_var_4])) (fst happy_var_2) + ) `HappyStk` happyRest}}}} + +happyReduce_15 = happySpecReduce_3 4# happyReduction_15 +happyReduction_15 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut21 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + happyIn13 + (let Loc l (INCLUDE s) = happy_var_1 in IncludePragma (l <^^> happy_var_3 <** (l:reverse happy_var_2 ++ [happy_var_3])) s + )}}} + +happyReduce_16 = happySpecReduce_3 4# happyReduction_16 +happyReduction_16 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut21 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + happyIn13 + (let Loc l (OPTIONS (mc, s)) = happy_var_1 + in OptionsPragma (l <^^> happy_var_3 <** (l:reverse happy_var_2 ++ [happy_var_3])) (readTool mc) s + )}}} + +happyReduce_17 = happySpecReduce_3 4# happyReduction_17 +happyReduction_17 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut21 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + happyIn13 + (let Loc l (CFILES s) = happy_var_1 + in CFilesPragma (l <^^> happy_var_3 <** (l:reverse happy_var_2 ++ [happy_var_3])) s + )}}} + +happyReduce_18 = happySpecReduce_3 5# happyReduction_18 +happyReduction_18 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut209 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut14 happy_x_3 of { happy_var_3 -> + happyIn14 + ((happy_var_1 : fst happy_var_3, happy_var_2 : snd happy_var_3) + )}}} + +happyReduce_19 = happySpecReduce_1 5# happyReduction_19 +happyReduction_19 happy_x_1 + = case happyOut209 happy_x_1 of { happy_var_1 -> + happyIn14 + (([happy_var_1],[]) + )} + +happyReduce_20 = happySpecReduce_2 6# happyReduction_20 +happyReduction_20 happy_x_2 + happy_x_1 + = case happyOut16 happy_x_1 of { happy_var_1 -> + case happyOut18 happy_x_2 of { happy_var_2 -> + happyIn15 + (let (is,ds,ss1,b,inf) = happy_var_2 + in \os ss l -> Module (l <++> inf <** (ss ++ ss1) <?? b) happy_var_1 os is ds + )}} + +happyReduce_21 = happyReduce 5# 7# happyReduction_21 +happyReduction_21 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Module) -> + case happyOut220 happy_x_2 of { happy_var_2 -> + case happyOut17 happy_x_3 of { happy_var_3 -> + case happyOut22 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 KW_Where) -> + happyIn16 + (Just $ ModuleHead (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_5]) happy_var_2 happy_var_3 happy_var_4 + ) `HappyStk` happyRest}}}}} + +happyReduce_22 = happySpecReduce_0 7# happyReduction_22 +happyReduction_22 = happyIn16 + (Nothing + ) + +happyReduce_23 = happySpecReduce_3 8# happyReduction_23 +happyReduction_23 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 DEPRECATED) -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + happyIn17 + (let Loc l (StringTok s) = happy_var_2 in Just $ DeprText (happy_var_1 <^^> happy_var_3 <** [l,happy_var_3]) s + )}}} + +happyReduce_24 = happySpecReduce_3 8# happyReduction_24 +happyReduction_24 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 WARNING) -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + happyIn17 + (let Loc l (StringTok s) = happy_var_2 in Just $ WarnText (happy_var_1 <^^> happy_var_3 <** [l,happy_var_3]) s + )}}} + +happyReduce_25 = happySpecReduce_0 8# happyReduction_25 +happyReduction_25 = happyIn17 + (Nothing + ) + +happyReduce_26 = happySpecReduce_3 9# happyReduction_26 +happyReduction_26 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> + case happyOut19 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> + happyIn18 + (let (is,ds,ss) = happy_var_2 in (is,ds,happy_var_1:ss ++ [happy_var_3], True, happy_var_1 <^^> happy_var_3) + )}}} + +happyReduce_27 = happySpecReduce_3 9# happyReduction_27 +happyReduction_27 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut218 happy_x_1 of { happy_var_1 -> + case happyOut19 happy_x_2 of { happy_var_2 -> + case happyOut219 happy_x_3 of { happy_var_3 -> + happyIn18 + (let (is,ds,ss) = happy_var_2 in (is,ds,happy_var_1:ss ++ [happy_var_3], False, happy_var_1 <^^> happy_var_3) + )}}} + +happyReduce_28 = happyReduce 4# 10# happyReduction_28 +happyReduction_28 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + case happyOut20 happy_x_3 of { happy_var_3 -> + case happyOut44 happy_x_4 of { happy_var_4 -> + happyIn19 + ((reverse (fst happy_var_2), fst happy_var_4, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3 ++ snd happy_var_4) + ) `HappyStk` happyRest}}}} + +happyReduce_29 = happySpecReduce_2 10# happyReduction_29 +happyReduction_29 happy_x_2 + happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut44 happy_x_2 of { happy_var_2 -> + happyIn19 + (([], fst happy_var_2, reverse happy_var_1 ++ snd happy_var_2) + )}} + +happyReduce_30 = happySpecReduce_3 10# happyReduction_30 +happyReduction_30 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut27 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn19 + ((reverse (fst happy_var_2), [], reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3) + )}}} + +happyReduce_31 = happySpecReduce_1 10# happyReduction_31 +happyReduction_31 happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn19 + (([], [], reverse happy_var_1) + )} + +happyReduce_32 = happySpecReduce_2 11# happyReduction_32 +happyReduction_32 happy_x_2 + happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 SemiColon) -> + happyIn20 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_33 = happySpecReduce_1 12# happyReduction_33 +happyReduction_33 happy_x_1 + = case happyOut20 happy_x_1 of { happy_var_1 -> + happyIn21 + (happy_var_1 + )} + +happyReduce_34 = happySpecReduce_0 12# happyReduction_34 +happyReduction_34 = happyIn21 + ([] + ) + +happyReduce_35 = happySpecReduce_1 13# happyReduction_35 +happyReduction_35 happy_x_1 + = case happyOut23 happy_x_1 of { happy_var_1 -> + happyIn22 + (Just happy_var_1 + )} + +happyReduce_36 = happySpecReduce_0 13# happyReduction_36 +happyReduction_36 = happyIn22 + (Nothing + ) + +happyReduce_37 = happyReduce 4# 14# happyReduction_37 +happyReduction_37 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut25 happy_x_2 of { happy_var_2 -> + case happyOut24 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn23 + (ExportSpecList (happy_var_1 <^^> happy_var_4 <** (happy_var_1:reverse (snd happy_var_2) ++ happy_var_3 ++ [happy_var_4])) (reverse (fst happy_var_2)) + ) `HappyStk` happyRest}}}} + +happyReduce_38 = happySpecReduce_3 14# happyReduction_38 +happyReduction_38 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut24 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn23 + (ExportSpecList (happy_var_1 <^^> happy_var_3 <** (happy_var_1:happy_var_2++[happy_var_3])) [] + )}}} + +happyReduce_39 = happySpecReduce_1 15# happyReduction_39 +happyReduction_39 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Comma) -> + happyIn24 + ([happy_var_1] + )} + +happyReduce_40 = happySpecReduce_0 15# happyReduction_40 +happyReduction_40 = happyIn24 + ([ ] + ) + +happyReduce_41 = happySpecReduce_3 16# happyReduction_41 +happyReduction_41 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut25 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut26 happy_x_3 of { happy_var_3 -> + happyIn25 + ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) + )}}} + +happyReduce_42 = happySpecReduce_1 16# happyReduction_42 +happyReduction_42 happy_x_1 + = case happyOut26 happy_x_1 of { happy_var_1 -> + happyIn25 + (([happy_var_1],[]) + )} + +happyReduce_43 = happySpecReduce_1 17# happyReduction_43 +happyReduction_43 happy_x_1 + = case happyOut191 happy_x_1 of { happy_var_1 -> + happyIn26 + (EVar (ann happy_var_1) happy_var_1 + )} + +happyReduce_44 = happySpecReduce_1 17# happyReduction_44 +happyReduction_44 happy_x_1 + = case happyOut222 happy_x_1 of { happy_var_1 -> + happyIn26 + (EAbs (ann happy_var_1) happy_var_1 + )} + +happyReduce_45 = happyReduce 4# 17# happyReduction_45 +happyReduction_45 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut222 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 DotDot) -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn26 + (EThingAll (ann happy_var_1 <++> nIS happy_var_4 <** [happy_var_2,happy_var_3,happy_var_4]) happy_var_1 + ) `HappyStk` happyRest}}}} + +happyReduce_46 = happySpecReduce_3 17# happyReduction_46 +happyReduction_46 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut222 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn26 + (EThingWith (ann happy_var_1 <++> nIS happy_var_3 <** [happy_var_2,happy_var_3]) happy_var_1 [] + )}}} + +happyReduce_47 = happyReduce 4# 17# happyReduction_47 +happyReduction_47 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut222 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOut38 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn26 + (EThingWith (ann happy_var_1 <++> nIS happy_var_4 <** (happy_var_2:reverse (snd happy_var_3) ++ [happy_var_4])) happy_var_1 (reverse (fst happy_var_3)) + ) `HappyStk` happyRest}}}} + +happyReduce_48 = happySpecReduce_2 17# happyReduction_48 +happyReduction_48 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Module) -> + case happyOut220 happy_x_2 of { happy_var_2 -> + happyIn26 + (EModuleContents (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_49 = happySpecReduce_3 18# happyReduction_49 +happyReduction_49 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut27 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOut28 happy_x_3 of { happy_var_3 -> + happyIn27 + ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) + )}}} + +happyReduce_50 = happySpecReduce_1 18# happyReduction_50 +happyReduction_50 happy_x_1 + = case happyOut28 happy_x_1 of { happy_var_1 -> + happyIn27 + (([happy_var_1],[]) + )} + +happyReduce_51 = happyReduce 7# 19# happyReduction_51 +happyReduction_51 (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) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Import) -> + case happyOut29 happy_x_2 of { happy_var_2 -> + case happyOut30 happy_x_3 of { happy_var_3 -> + case happyOut31 happy_x_4 of { happy_var_4 -> + case happyOut220 happy_x_5 of { happy_var_5 -> + case happyOut32 happy_x_6 of { happy_var_6 -> + case happyOut33 happy_x_7 of { happy_var_7 -> + happyIn28 + (let { (mmn,ss,ml) = happy_var_6 ; + l = nIS happy_var_1 <++> ann happy_var_5 <+?> ml <+?> (fmap ann) happy_var_7 <** (happy_var_1:snd happy_var_2 ++ snd happy_var_3 ++ snd happy_var_4 ++ ss)} + in ImportDecl l happy_var_5 (fst happy_var_3) (fst happy_var_2) (fst happy_var_4) mmn happy_var_7 + ) `HappyStk` happyRest}}}}}}} + +happyReduce_52 = happySpecReduce_2 20# happyReduction_52 +happyReduction_52 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 SOURCE) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 PragmaEnd) -> + happyIn29 + ((True,[happy_var_1,happy_var_2]) + )}} + +happyReduce_53 = happySpecReduce_0 20# happyReduction_53 +happyReduction_53 = happyIn29 + ((False,[]) + ) + +happyReduce_54 = happySpecReduce_1 21# happyReduction_54 +happyReduction_54 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Qualified) -> + happyIn30 + ((True,[happy_var_1]) + )} + +happyReduce_55 = happySpecReduce_0 21# happyReduction_55 +happyReduction_55 = happyIn30 + ((False, []) + ) + +happyReduce_56 = happyMonadReduce 1# 22# happyReduction_56 +happyReduction_56 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> + ( do { checkEnabled PackageImports ; + let { Loc l (StringTok s) = happy_var_1 } ; + return $ (Just s,[l]) })} + ) (\r -> happyReturn (happyIn31 r)) + +happyReduce_57 = happySpecReduce_0 22# happyReduction_57 +happyReduction_57 = happyIn31 + ((Nothing,[]) + ) + +happyReduce_58 = happySpecReduce_2 23# happyReduction_58 +happyReduction_58 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_As) -> + case happyOut220 happy_x_2 of { happy_var_2 -> + happyIn32 + ((Just happy_var_2,[happy_var_1],Just (nIS happy_var_1 <++> ann happy_var_2)) + )}} + +happyReduce_59 = happySpecReduce_0 23# happyReduction_59 +happyReduction_59 = happyIn32 + ((Nothing,[],Nothing) + ) + +happyReduce_60 = happySpecReduce_1 24# happyReduction_60 +happyReduction_60 happy_x_1 + = case happyOut34 happy_x_1 of { happy_var_1 -> + happyIn33 + (Just happy_var_1 + )} + +happyReduce_61 = happySpecReduce_0 24# happyReduction_61 +happyReduction_61 = happyIn33 + (Nothing + ) + +happyReduce_62 = happyReduce 5# 25# happyReduction_62 +happyReduction_62 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut35 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOut36 happy_x_3 of { happy_var_3 -> + case happyOut24 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 RightParen) -> + happyIn34 + (let {(b,ml,s) = happy_var_1 ; + l = (ml <?+> (happy_var_2 <^^> happy_var_5)) <** (s ++ happy_var_2:snd happy_var_3 ++ happy_var_4 ++ [happy_var_5])} + in ImportSpecList l b (reverse (fst happy_var_3)) + ) `HappyStk` happyRest}}}}} + +happyReduce_63 = happyReduce 4# 25# happyReduction_63 +happyReduction_63 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut35 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOut24 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn34 + (let {(b,ml,s) = happy_var_1 ; l = (ml <?+> (happy_var_2 <^^> happy_var_4)) <** (s ++ happy_var_2:happy_var_3 ++ [happy_var_4])} + in ImportSpecList l b [] + ) `HappyStk` happyRest}}}} + +happyReduce_64 = happySpecReduce_1 26# happyReduction_64 +happyReduction_64 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Hiding) -> + happyIn35 + ((True,Just (nIS happy_var_1),[happy_var_1]) + )} + +happyReduce_65 = happySpecReduce_0 26# happyReduction_65 +happyReduction_65 = happyIn35 + ((False,Nothing,[]) + ) + +happyReduce_66 = happySpecReduce_3 27# happyReduction_66 +happyReduction_66 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut36 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut37 happy_x_3 of { happy_var_3 -> + happyIn36 + ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) + )}}} + +happyReduce_67 = happySpecReduce_1 27# happyReduction_67 +happyReduction_67 happy_x_1 + = case happyOut37 happy_x_1 of { happy_var_1 -> + happyIn36 + (([happy_var_1],[]) + )} + +happyReduce_68 = happySpecReduce_1 28# happyReduction_68 +happyReduction_68 happy_x_1 + = case happyOut189 happy_x_1 of { happy_var_1 -> + happyIn37 + (IVar (ann happy_var_1) happy_var_1 + )} + +happyReduce_69 = happySpecReduce_1 28# happyReduction_69 +happyReduction_69 happy_x_1 + = case happyOut221 happy_x_1 of { happy_var_1 -> + happyIn37 + (IAbs (ann happy_var_1) happy_var_1 + )} + +happyReduce_70 = happyReduce 4# 28# happyReduction_70 +happyReduction_70 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut221 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 DotDot) -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn37 + (IThingAll (ann happy_var_1 <++> nIS happy_var_4 <** [happy_var_2,happy_var_3,happy_var_4]) happy_var_1 + ) `HappyStk` happyRest}}}} + +happyReduce_71 = happySpecReduce_3 28# happyReduction_71 +happyReduction_71 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut221 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn37 + (IThingWith (ann happy_var_1 <++> nIS happy_var_3 <** [happy_var_2,happy_var_3]) happy_var_1 [] + )}}} + +happyReduce_72 = happyReduce 4# 28# happyReduction_72 +happyReduction_72 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut221 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOut38 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn37 + (IThingWith (ann happy_var_1 <++> nIS happy_var_4 <** (happy_var_2:reverse (snd happy_var_3) ++ [happy_var_4])) happy_var_1 (reverse (fst happy_var_3)) + ) `HappyStk` happyRest}}}} + +happyReduce_73 = happySpecReduce_3 29# happyReduction_73 +happyReduction_73 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut38 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut39 happy_x_3 of { happy_var_3 -> + happyIn38 + ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) + )}}} + +happyReduce_74 = happySpecReduce_1 29# happyReduction_74 +happyReduction_74 happy_x_1 + = case happyOut39 happy_x_1 of { happy_var_1 -> + happyIn38 + (([happy_var_1],[]) + )} + +happyReduce_75 = happySpecReduce_1 30# happyReduction_75 +happyReduction_75 happy_x_1 + = case happyOut189 happy_x_1 of { happy_var_1 -> + happyIn39 + (VarName (ann happy_var_1) happy_var_1 + )} + +happyReduce_76 = happySpecReduce_1 30# happyReduction_76 +happyReduction_76 happy_x_1 + = case happyOut193 happy_x_1 of { happy_var_1 -> + happyIn39 + (ConName (ann happy_var_1) happy_var_1 + )} + +happyReduce_77 = happySpecReduce_3 31# happyReduction_77 +happyReduction_77 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut42 happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_2 of { happy_var_2 -> + case happyOut43 happy_x_3 of { happy_var_3 -> + happyIn40 + (let (ops,ss,l) = happy_var_3 + in InfixDecl (ann happy_var_1 <++> l <** (snd happy_var_2 ++ reverse ss)) happy_var_1 (fst happy_var_2) (reverse ops) + )}}} + +happyReduce_78 = happySpecReduce_0 32# happyReduction_78 +happyReduction_78 = happyIn41 + ((Nothing, []) + ) + +happyReduce_79 = happyMonadReduce 1# 32# happyReduction_79 +happyReduction_79 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { happy_var_1 -> + ( let Loc l (IntTok i) = happy_var_1 in checkPrec i >>= \i -> return (Just i, [l]))} + ) (\r -> happyReturn (happyIn41 r)) + +happyReduce_80 = happySpecReduce_1 33# happyReduction_80 +happyReduction_80 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Infix) -> + happyIn42 + (AssocNone $ nIS happy_var_1 + )} + +happyReduce_81 = happySpecReduce_1 33# happyReduction_81 +happyReduction_81 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_InfixL) -> + happyIn42 + (AssocLeft $ nIS happy_var_1 + )} + +happyReduce_82 = happySpecReduce_1 33# happyReduction_82 +happyReduction_82 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_InfixR) -> + happyIn42 + (AssocRight $ nIS happy_var_1 + )} + +happyReduce_83 = happySpecReduce_3 34# happyReduction_83 +happyReduction_83 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut43 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut200 happy_x_3 of { happy_var_3 -> + happyIn43 + (let (ops,ss,l) = happy_var_1 in (happy_var_3 : ops, happy_var_2 : ss, l <++> ann happy_var_3) + )}}} + +happyReduce_84 = happySpecReduce_1 34# happyReduction_84 +happyReduction_84 happy_x_1 + = case happyOut200 happy_x_1 of { happy_var_1 -> + happyIn43 + (([happy_var_1],[],ann happy_var_1) + )} + +happyReduce_85 = happyMonadReduce 2# 35# happyReduction_85 +happyReduction_85 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut21 happy_x_2 of { happy_var_2 -> + ( checkRevDecls (fst happy_var_1) >>= \ds -> return (ds, snd happy_var_1 ++ reverse happy_var_2))}} + ) (\r -> happyReturn (happyIn44 r)) + +happyReduce_86 = happySpecReduce_3 36# happyReduction_86 +happyReduction_86 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut45 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOut46 happy_x_3 of { happy_var_3 -> + happyIn45 + ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) + )}}} + +happyReduce_87 = happySpecReduce_1 36# happyReduction_87 +happyReduction_87 happy_x_1 + = case happyOut46 happy_x_1 of { happy_var_1 -> + happyIn45 + (([happy_var_1],[]) + )} + +happyReduce_88 = happyMonadReduce 4# 37# happyReduction_88 +happyReduction_88 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> + case happyOut72 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Equals) -> + case happyOut82 happy_x_4 of { happy_var_4 -> + ( do { (c,ts) <- checkSimpleType happy_var_2; + let {l = nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]}; + return (TypeDecl l c ts happy_var_4) })}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_89 = happyMonadReduce 4# 37# happyReduction_89 +happyReduction_89 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Family) -> + case happyOut74 happy_x_3 of { happy_var_3 -> + case happyOut117 happy_x_4 of { happy_var_4 -> + ( do { (c,ts) <- checkSimpleType happy_var_3; + let {l = nIS happy_var_1 <++> ann happy_var_3 <+?> (fmap ann) (fst happy_var_4) <** (happy_var_1:happy_var_2:snd happy_var_4)}; + return (TypeFamDecl l c ts (fst happy_var_4)) })}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_90 = happyMonadReduce 5# 37# happyReduction_90 +happyReduction_90 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> + case happyOut71 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 Equals) -> + case happyOut82 happy_x_5 of { happy_var_5 -> + ( do { -- no checkSimpleType happy_var_4 since dtype may contain type patterns + checkEnabled TypeFamilies ; + let {l = nIS happy_var_1 <++> ann happy_var_5 <** [happy_var_1,happy_var_2,happy_var_4]}; + return (TypeInsDecl l happy_var_3 happy_var_5) })}}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_91 = happyMonadReduce 4# 37# happyReduction_91 +happyReduction_91 (happy_x_4 `HappyStk` + 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 happyOut83 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + case happyOut111 happy_x_4 of { happy_var_4 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_2; + let { (qds,ss1,minf1) = happy_var_3; (mders,ss2,minf2) = happy_var_4 ; + l = happy_var_1 <> happy_var_2 <+?> minf1 <+?> minf2 <** (ss1 ++ ss2)}; + checkDataOrNew happy_var_1 qds; + return (DataDecl l happy_var_1 cs c t (reverse qds) mders) })}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_92 = happyMonadReduce 6# 37# happyReduction_92 +happyReduction_92 (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 happyOut47 happy_x_1 of { happy_var_1 -> + case happyOut83 happy_x_2 of { happy_var_2 -> + case happyOut117 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 KW_Where) -> + case happyOut94 happy_x_5 of { happy_var_5 -> + case happyOut111 happy_x_6 of { happy_var_6 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_2; + let { (gs,ss1,inf,b) = happy_var_5; (ds,ss2,minf) = happy_var_6 ; + l = ann happy_var_1 <++> inf <+?> minf <** (snd happy_var_3 ++ (happy_var_4:ss1 ++ ss2)) <?? b}; + checkDataOrNew happy_var_1 gs; + return (GDataDecl l happy_var_1 cs c t (fst happy_var_3) (reverse gs) ds) })}}}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_93 = happyMonadReduce 4# 37# happyReduction_93 +happyReduction_93 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Data) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Family) -> + case happyOut83 happy_x_3 of { happy_var_3 -> + case happyOut117 happy_x_4 of { happy_var_4 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_3; + let {l = nIS happy_var_1 <++> ann happy_var_3 <+?> (fmap ann) (fst happy_var_4) <** (happy_var_1:happy_var_2:snd happy_var_4)}; + return (DataFamDecl l cs c t (fst happy_var_4)) })}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_94 = happyMonadReduce 5# 37# happyReduction_94 +happyReduction_94 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + 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 happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> + case happyOut82 happy_x_3 of { happy_var_3 -> + case happyOut99 happy_x_4 of { happy_var_4 -> + case happyOut111 happy_x_5 of { happy_var_5 -> + ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; + checkEnabled TypeFamilies ; + let { (qds,ss1,minf1) = happy_var_4 ; (mders,ss2,minf2) = happy_var_5 ; + l = happy_var_1 <> happy_var_3 <+?> minf1 <+?> minf2 <** (happy_var_2:ss1 ++ ss2) }; + checkDataOrNew happy_var_1 qds; + return (DataInsDecl l happy_var_1 happy_var_3 (reverse qds) mders) })}}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_95 = happyMonadReduce 7# 37# happyReduction_95 +happyReduction_95 (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 happyOut47 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> + case happyOut82 happy_x_3 of { happy_var_3 -> + case happyOut117 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 KW_Where) -> + case happyOut94 happy_x_6 of { happy_var_6 -> + case happyOut111 happy_x_7 of { happy_var_7 -> + ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; + checkEnabled TypeFamilies ; + let {(gs,ss1,inf,b) = happy_var_6; (ds,ss2,minf) = happy_var_7 ; + l = ann happy_var_1 <++> inf <+?> minf <** (happy_var_2:snd happy_var_4 ++ (happy_var_5:ss1 ++ ss2)) <?? b}; + checkDataOrNew happy_var_1 gs; + return (GDataInsDecl l happy_var_1 happy_var_3 (fst happy_var_4) (reverse gs) ds) })}}}}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_96 = happyMonadReduce 4# 37# happyReduction_96 +happyReduction_96 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Class) -> + case happyOut83 happy_x_2 of { happy_var_2 -> + case happyOut91 happy_x_3 of { happy_var_3 -> + case happyOut118 happy_x_4 of { happy_var_4 -> + ( do { (cs,c,vs) <- checkClassHeader happy_var_2; + let {(fds,ss1,minf1) = happy_var_3;(mcs,ss2,minf2,b) = happy_var_4} ; + let { l = nIS happy_var_1 <++> ann happy_var_2 <+?> minf1 <+?> minf2 <** (happy_var_1:ss1 ++ ss2) <?? b} ; + return (ClassDecl l cs c vs fds mcs) })}}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_97 = happyMonadReduce 3# 37# happyReduction_97 +happyReduction_97 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Instance) -> + case happyOut83 happy_x_2 of { happy_var_2 -> + case happyOut123 happy_x_3 of { happy_var_3 -> + ( do { (cs,c,ts) <- checkInstHeader happy_var_2; + let {(mis,ss,minf,b) = happy_var_3}; + return (InstDecl (nIS happy_var_1 <++> ann happy_var_2 <+?> minf <** (happy_var_1:ss) <?? b) cs c ts mis) })}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_98 = happyMonadReduce 3# 37# happyReduction_98 +happyReduction_98 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> + case happyOut83 happy_x_3 of { happy_var_3 -> + ( do { checkEnabled StandaloneDeriving ; + (cs, c, ts) <- checkInstHeader happy_var_3; + let {l = nIS happy_var_1 <++> ann happy_var_3 <** [happy_var_1,happy_var_2]}; + return (DerivDecl l cs c ts) })}}} + ) (\r -> happyReturn (happyIn46 r)) + +happyReduce_99 = happyReduce 4# 37# happyReduction_99 +happyReduction_99 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Default) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOut48 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn46 + (DefaultDecl (happy_var_1 <^^> happy_var_4 <** (happy_var_1:happy_var_2 : snd happy_var_3 ++ [happy_var_4])) (fst happy_var_3) + ) `HappyStk` happyRest}}}} + +happyReduce_100 = happySpecReduce_3 37# happyReduction_100 +happyReduction_100 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THParenEscape) -> + case happyOut135 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn46 + (let l = happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3] in SpliceDecl l $ ParenSplice l happy_var_2 + )}}} + +happyReduce_101 = happyReduce 5# 37# happyReduction_101 +happyReduction_101 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Foreign) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Import) -> + case happyOut58 happy_x_3 of { happy_var_3 -> + case happyOut59 happy_x_4 of { happy_var_4 -> + case happyOut60 happy_x_5 of { happy_var_5 -> + happyIn46 + (let (s,n,t,ss) = happy_var_5 in ForImp (nIS happy_var_1 <++> ann t <** (happy_var_1:happy_var_2:ss)) happy_var_3 happy_var_4 s n t + ) `HappyStk` happyRest}}}}} + +happyReduce_102 = happyReduce 4# 37# happyReduction_102 +happyReduction_102 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Foreign) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Export) -> + case happyOut58 happy_x_3 of { happy_var_3 -> + case happyOut60 happy_x_4 of { happy_var_4 -> + happyIn46 + (let (s,n,t,ss) = happy_var_4 in ForExp (nIS happy_var_1 <++> ann t <** (happy_var_1:happy_var_2:ss)) happy_var_3 s n t + ) `HappyStk` happyRest}}}} + +happyReduce_103 = happySpecReduce_3 37# happyReduction_103 +happyReduction_103 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 RULES) -> + case happyOut61 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + happyIn46 + (RulePragmaDecl (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) $ reverse happy_var_2 + )}}} + +happyReduce_104 = happySpecReduce_3 37# happyReduction_104 +happyReduction_104 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 DEPRECATED) -> + case happyOut67 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + happyIn46 + (DeprPragmaDecl (happy_var_1 <^^> happy_var_3 <** (happy_var_1:snd happy_var_2++[happy_var_3])) $ reverse (fst happy_var_2) + )}}} + +happyReduce_105 = happySpecReduce_3 37# happyReduction_105 +happyReduction_105 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 WARNING) -> + case happyOut67 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + happyIn46 + (WarnPragmaDecl (happy_var_1 <^^> happy_var_3 <** (happy_var_1:snd happy_var_2++[happy_var_3])) $ reverse (fst happy_var_2) + )}}} + +happyReduce_106 = happySpecReduce_1 37# happyReduction_106 +happyReduction_106 happy_x_1 + = case happyOut51 happy_x_1 of { happy_var_1 -> + happyIn46 + (happy_var_1 + )} + +happyReduce_107 = happySpecReduce_1 38# happyReduction_107 +happyReduction_107 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Data) -> + happyIn47 + (DataType $ nIS happy_var_1 + )} + +happyReduce_108 = happySpecReduce_1 38# happyReduction_108 +happyReduction_108 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_NewType) -> + happyIn47 + (NewType $ nIS happy_var_1 + )} + +happyReduce_109 = happyMonadReduce 1# 39# happyReduction_109 +happyReduction_109 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut85 happy_x_1 of { happy_var_1 -> + ( do { ts <- mapM checkType (fst happy_var_1); + return $ (reverse ts, reverse (snd happy_var_1)) })} + ) (\r -> happyReturn (happyIn48 r)) + +happyReduce_110 = happySpecReduce_1 39# happyReduction_110 +happyReduction_110 happy_x_1 + = case happyOut73 happy_x_1 of { happy_var_1 -> + happyIn48 + (([happy_var_1],[]) + )} + +happyReduce_111 = happySpecReduce_0 39# happyReduction_111 +happyReduction_111 = happyIn48 + (([],[]) + ) + +happyReduce_112 = happyMonadReduce 3# 40# happyReduction_112 +happyReduction_112 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut50 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + ( checkRevDecls (fst happy_var_2) >>= \ds -> return (ds, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3))}}} + ) (\r -> happyReturn (happyIn49 r)) + +happyReduce_113 = happySpecReduce_1 40# happyReduction_113 +happyReduction_113 happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn49 + (([],reverse happy_var_1) + )} + +happyReduce_114 = happySpecReduce_3 41# happyReduction_114 +happyReduction_114 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut50 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOut51 happy_x_3 of { happy_var_3 -> + happyIn50 + ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) + )}}} + +happyReduce_115 = happySpecReduce_1 41# happyReduction_115 +happyReduction_115 happy_x_1 + = case happyOut51 happy_x_1 of { happy_var_1 -> + happyIn50 + (([happy_var_1],[]) + )} + +happyReduce_116 = happySpecReduce_1 42# happyReduction_116 +happyReduction_116 happy_x_1 + = case happyOut53 happy_x_1 of { happy_var_1 -> + happyIn51 + (happy_var_1 + )} + +happyReduce_117 = happySpecReduce_1 42# happyReduction_117 +happyReduction_117 happy_x_1 + = case happyOut40 happy_x_1 of { happy_var_1 -> + happyIn51 + (happy_var_1 + )} + +happyReduce_118 = happySpecReduce_1 42# happyReduction_118 +happyReduction_118 happy_x_1 + = case happyOut129 happy_x_1 of { happy_var_1 -> + happyIn51 + (happy_var_1 + )} + +happyReduce_119 = happySpecReduce_3 43# happyReduction_119 +happyReduction_119 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> + case happyOut49 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> + happyIn52 + (BDecls (happy_var_1 <^^> happy_var_3 <** (happy_var_1:snd happy_var_2++[happy_var_3]) <?? True ) (fst happy_var_2) + )}}} + +happyReduce_120 = happySpecReduce_3 43# happyReduction_120 +happyReduction_120 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut218 happy_x_1 of { happy_var_1 -> + case happyOut49 happy_x_2 of { happy_var_2 -> + case happyOut219 happy_x_3 of { happy_var_3 -> + happyIn52 + (BDecls (happy_var_1 <^^> happy_var_3 <** (happy_var_1:snd happy_var_2++[happy_var_3]) <?? False) (fst happy_var_2) + )}}} + +happyReduce_121 = happyMonadReduce 3# 44# happyReduction_121 +happyReduction_121 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> + case happyOut82 happy_x_3 of { happy_var_3 -> + ( do { v <- checkSigVar happy_var_1; + return $ TypeSig (happy_var_1 <> happy_var_3 <** [happy_var_2]) [v] happy_var_3 })}}} + ) (\r -> happyReturn (happyIn53 r)) + +happyReduce_122 = happyMonadReduce 5# 44# happyReduction_122 +happyReduction_122 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut57 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 DoubleColon) -> + case happyOut82 happy_x_5 of { happy_var_5 -> + ( do { v <- checkSigVar happy_var_1; + let {(vs,ss,_) = happy_var_3 ; l = happy_var_1 <> happy_var_5 <** (happy_var_2 : reverse ss ++ [happy_var_4]) } ; + return $ TypeSig l (v : reverse vs) happy_var_5 })}}}}} + ) (\r -> happyReturn (happyIn53 r)) + +happyReduce_123 = happyReduce 4# 44# happyReduction_123 +happyReduction_123 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut191 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 PragmaEnd) -> + happyIn53 + (let Loc l (INLINE s) = happy_var_1 in InlineSig (l <^^> happy_var_4 <** [l,happy_var_4]) s happy_var_2 happy_var_3 + ) `HappyStk` happyRest}}}} + +happyReduce_124 = happyReduce 5# 44# 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 happyOutTok happy_x_1 of { (Loc happy_var_1 SPECIALISE) -> + case happyOut191 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> + case happyOut54 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 PragmaEnd) -> + happyIn53 + (SpecSig (happy_var_1 <^^> happy_var_5 <** (happy_var_1:happy_var_3 : snd happy_var_4 ++ [happy_var_5])) happy_var_2 (fst happy_var_4) + ) `HappyStk` happyRest}}}}} + +happyReduce_125 = happyReduce 6# 44# happyReduction_125 +happyReduction_125 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut191 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 DoubleColon) -> + case happyOut54 happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (Loc happy_var_6 PragmaEnd) -> + happyIn53 + (let Loc l (SPECIALISE_INLINE s) = happy_var_1 + in SpecInlineSig (l <^^> happy_var_6 <** (l:happy_var_4:snd happy_var_5++[happy_var_6])) s happy_var_2 happy_var_3 (fst happy_var_5) + ) `HappyStk` happyRest}}}}}} + +happyReduce_126 = happyMonadReduce 4# 44# happyReduction_126 +happyReduction_126 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 SPECIALISE) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Instance) -> + case happyOut83 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 PragmaEnd) -> + ( do { (cs,c,ts) <- checkInstHeader happy_var_3; + let {l = happy_var_1 <^^> happy_var_4 <** [happy_var_1,happy_var_2,happy_var_4]}; + return $ InstSig l cs c ts })}}}} + ) (\r -> happyReturn (happyIn53 r)) + +happyReduce_127 = happySpecReduce_1 45# happyReduction_127 +happyReduction_127 happy_x_1 + = case happyOut55 happy_x_1 of { happy_var_1 -> + happyIn54 + (([happy_var_1],[]) + )} + +happyReduce_128 = happySpecReduce_3 45# happyReduction_128 +happyReduction_128 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut55 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut54 happy_x_3 of { happy_var_3 -> + happyIn54 + ((happy_var_1 : fst happy_var_3, happy_var_2 : snd happy_var_3) + )}}} + +happyReduce_129 = happyMonadReduce 1# 46# happyReduction_129 +happyReduction_129 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut83 happy_x_1 of { happy_var_1 -> + ( checkType $ mkTyForall (ann happy_var_1) Nothing Nothing happy_var_1)} + ) (\r -> happyReturn (happyIn55 r)) + +happyReduce_130 = happySpecReduce_1 47# happyReduction_130 +happyReduction_130 happy_x_1 + = case happyOut52 happy_x_1 of { happy_var_1 -> + happyIn56 + (happy_var_1 + )} + +happyReduce_131 = happySpecReduce_3 47# happyReduction_131 +happyReduction_131 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> + case happyOut185 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> + happyIn56 + (IPBinds (happy_var_1 <^^> happy_var_3 <** snd happy_var_2 <?? True ) (fst happy_var_2) + )}}} + +happyReduce_132 = happySpecReduce_3 47# happyReduction_132 +happyReduction_132 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut218 happy_x_1 of { happy_var_1 -> + case happyOut185 happy_x_2 of { happy_var_2 -> + case happyOut219 happy_x_3 of { happy_var_3 -> + happyIn56 + (IPBinds (happy_var_1 <^^> happy_var_3 <** snd happy_var_2 <?? False) (fst happy_var_2) + )}}} + +happyReduce_133 = happySpecReduce_3 48# happyReduction_133 +happyReduction_133 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut57 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut189 happy_x_3 of { happy_var_3 -> + happyIn57 + (let (ns,ss,l) = happy_var_1 in (happy_var_3 : ns, happy_var_2 : ss, l <++> ann happy_var_3) + )}}} + +happyReduce_134 = happyMonadReduce 1# 48# happyReduction_134 +happyReduction_134 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut191 happy_x_1 of { happy_var_1 -> + ( do { n <- checkUnQual happy_var_1; + return ([n],[],ann n) })} + ) (\r -> happyReturn (happyIn57 r)) + +happyReduce_135 = happySpecReduce_1 49# happyReduction_135 +happyReduction_135 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_StdCall) -> + happyIn58 + (StdCall (nIS happy_var_1) + )} + +happyReduce_136 = happySpecReduce_1 49# happyReduction_136 +happyReduction_136 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_CCall) -> + happyIn58 + (CCall (nIS happy_var_1) + )} + +happyReduce_137 = happySpecReduce_1 50# happyReduction_137 +happyReduction_137 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Safe) -> + happyIn59 + (Just $ PlaySafe (nIS happy_var_1) False + )} + +happyReduce_138 = happySpecReduce_1 50# happyReduction_138 +happyReduction_138 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Unsafe) -> + happyIn59 + (Just $ PlayRisky (nIS happy_var_1) + )} + +happyReduce_139 = happySpecReduce_1 50# happyReduction_139 +happyReduction_139 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Threadsafe) -> + happyIn59 + (Just $ PlaySafe (nIS happy_var_1) True + )} + +happyReduce_140 = happySpecReduce_0 50# happyReduction_140 +happyReduction_140 = happyIn59 + (Nothing + ) + +happyReduce_141 = happyReduce 4# 51# happyReduction_141 +happyReduction_141 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut190 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> + case happyOut71 happy_x_4 of { happy_var_4 -> + happyIn60 + (let Loc l (StringTok s) = happy_var_1 in (s, happy_var_2, happy_var_4, [l,happy_var_3]) + ) `HappyStk` happyRest}}}} + +happyReduce_142 = happySpecReduce_3 51# happyReduction_142 +happyReduction_142 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut190 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> + case happyOut71 happy_x_3 of { happy_var_3 -> + happyIn60 + (("", happy_var_1, happy_var_3, [happy_var_2]) + )}}} + +happyReduce_143 = happySpecReduce_3 52# happyReduction_143 +happyReduction_143 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut61 happy_x_1 of { happy_var_1 -> + case happyOut62 happy_x_3 of { happy_var_3 -> + happyIn61 + (happy_var_3 : happy_var_1 + )}} + +happyReduce_144 = happySpecReduce_2 52# happyReduction_144 +happyReduction_144 happy_x_2 + happy_x_1 + = case happyOut61 happy_x_1 of { happy_var_1 -> + happyIn61 + (happy_var_1 + )} + +happyReduce_145 = happySpecReduce_1 52# happyReduction_145 +happyReduction_145 happy_x_1 + = case happyOut62 happy_x_1 of { happy_var_1 -> + happyIn61 + ([happy_var_1] + )} + +happyReduce_146 = happySpecReduce_0 52# happyReduction_146 +happyReduction_146 = happyIn61 + ([] + ) + +happyReduce_147 = happyMonadReduce 6# 53# happyReduction_147 +happyReduction_147 (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 happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut64 happy_x_3 of { happy_var_3 -> + case happyOut137 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 Equals) -> + case happyOut135 happy_x_6 of { happy_var_6 -> + ( do { let {Loc l (StringTok s) = happy_var_1}; + e <- checkRuleExpr happy_var_4; + return $ Rule (nIS l <++> ann happy_var_6 <** snd happy_var_3 ++ [happy_var_5]) s happy_var_2 (fst happy_var_3) e happy_var_6 })}}}}}} + ) (\r -> happyReturn (happyIn62 r)) + +happyReduce_148 = happySpecReduce_0 54# happyReduction_148 +happyReduction_148 = happyIn63 + (Nothing + ) + +happyReduce_149 = happySpecReduce_3 54# happyReduction_149 +happyReduction_149 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightSquare) -> + happyIn63 + (let Loc l (IntTok i) = happy_var_2 in Just $ ActiveFrom (happy_var_1 <^^> happy_var_3 <** [happy_var_1,l,happy_var_3]) (fromInteger i) + )}}} + +happyReduce_150 = happyReduce 4# 54# happyReduction_150 +happyReduction_150 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Tilde) -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightSquare) -> + happyIn63 + (let Loc l (IntTok i) = happy_var_3 in Just $ ActiveUntil (happy_var_1 <^^> happy_var_4 <** [happy_var_1,happy_var_2,l,happy_var_4]) (fromInteger i) + ) `HappyStk` happyRest}}}} + +happyReduce_151 = happySpecReduce_0 55# happyReduction_151 +happyReduction_151 = happyIn64 + ((Nothing,[]) + ) + +happyReduce_152 = happySpecReduce_3 55# happyReduction_152 +happyReduction_152 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Forall) -> + case happyOut65 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Dot) -> + happyIn64 + ((Just happy_var_2,[happy_var_1,happy_var_3]) + )}}} + +happyReduce_153 = happySpecReduce_1 56# happyReduction_153 +happyReduction_153 happy_x_1 + = case happyOut66 happy_x_1 of { happy_var_1 -> + happyIn65 + ([happy_var_1] + )} + +happyReduce_154 = happySpecReduce_2 56# happyReduction_154 +happyReduction_154 happy_x_2 + happy_x_1 + = case happyOut66 happy_x_1 of { happy_var_1 -> + case happyOut65 happy_x_2 of { happy_var_2 -> + happyIn65 + (happy_var_1 : happy_var_2 + )}} + +happyReduce_155 = happySpecReduce_1 57# happyReduction_155 +happyReduction_155 happy_x_1 + = case happyOut206 happy_x_1 of { happy_var_1 -> + happyIn66 + (RuleVar (ann happy_var_1) happy_var_1 + )} + +happyReduce_156 = happyReduce 5# 57# happyReduction_156 +happyReduction_156 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut206 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> + case happyOut82 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 RightParen) -> + happyIn66 + (TypedRuleVar (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_3,happy_var_5]) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}}} + +happyReduce_157 = happySpecReduce_3 58# happyReduction_157 +happyReduction_157 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut67 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 SemiColon) -> + case happyOut68 happy_x_3 of { happy_var_3 -> + happyIn67 + ((fst happy_var_3 : fst happy_var_1, snd happy_var_1 ++ (happy_var_2:snd happy_var_3)) + )}}} + +happyReduce_158 = happySpecReduce_2 58# happyReduction_158 +happyReduction_158 happy_x_2 + happy_x_1 + = case happyOut67 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 SemiColon) -> + happyIn67 + ((fst happy_var_1, snd happy_var_1 ++ [happy_var_2]) + )}} + +happyReduce_159 = happySpecReduce_1 58# happyReduction_159 +happyReduction_159 happy_x_1 + = case happyOut68 happy_x_1 of { happy_var_1 -> + happyIn67 + (([fst happy_var_1],snd happy_var_1) + )} + +happyReduce_160 = happySpecReduce_0 58# happyReduction_160 +happyReduction_160 = happyIn67 + (([],[]) + ) + +happyReduce_161 = happySpecReduce_2 59# happyReduction_161 +happyReduction_161 happy_x_2 + happy_x_1 + = case happyOut69 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { happy_var_2 -> + happyIn68 + (let Loc l (StringTok s) = happy_var_2 in ((fst happy_var_1,s),snd happy_var_1 ++ [l]) + )}} + +happyReduce_162 = happySpecReduce_1 60# happyReduction_162 +happyReduction_162 happy_x_1 + = case happyOut70 happy_x_1 of { happy_var_1 -> + happyIn69 + (([happy_var_1],[]) + )} + +happyReduce_163 = happySpecReduce_3 60# happyReduction_163 +happyReduction_163 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut70 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut69 happy_x_3 of { happy_var_3 -> + happyIn69 + ((happy_var_1 : fst happy_var_3, happy_var_2 : snd happy_var_3) + )}}} + +happyReduce_164 = happySpecReduce_1 61# happyReduction_164 +happyReduction_164 happy_x_1 + = case happyOut193 happy_x_1 of { happy_var_1 -> + happyIn70 + (happy_var_1 + )} + +happyReduce_165 = happySpecReduce_1 61# happyReduction_165 +happyReduction_165 happy_x_1 + = case happyOut189 happy_x_1 of { happy_var_1 -> + happyIn70 + (happy_var_1 + )} + +happyReduce_166 = happyMonadReduce 1# 62# happyReduction_166 +happyReduction_166 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut72 happy_x_1 of { happy_var_1 -> + ( checkType happy_var_1)} + ) (\r -> happyReturn (happyIn71 r)) + +happyReduce_167 = happySpecReduce_1 63# happyReduction_167 +happyReduction_167 happy_x_1 + = case happyOut76 happy_x_1 of { happy_var_1 -> + happyIn72 + (happy_var_1 + )} + +happyReduce_168 = happySpecReduce_3 63# happyReduction_168 +happyReduction_168 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut76 happy_x_1 of { happy_var_1 -> + case happyOut81 happy_x_2 of { happy_var_2 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn72 + (TyInfix (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_169 = happySpecReduce_3 63# happyReduction_169 +happyReduction_169 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut76 happy_x_1 of { happy_var_1 -> + case happyOut224 happy_x_2 of { happy_var_2 -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn72 + (TyInfix (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_170 = happySpecReduce_3 63# happyReduction_170 +happyReduction_170 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut76 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> + case happyOut83 happy_x_3 of { happy_var_3 -> + happyIn72 + (TyFun (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_171 = happyMonadReduce 3# 63# happyReduction_171 +happyReduction_171 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Tilde) -> + case happyOut76 happy_x_3 of { happy_var_3 -> + ( do { checkEnabled TypeFamilies ; + let {l = happy_var_1 <> happy_var_3 <** [happy_var_2]}; + return $ TyPred l $ EqualP l happy_var_1 happy_var_3 })}}} + ) (\r -> happyReturn (happyIn72 r)) + +happyReduce_172 = happyMonadReduce 1# 64# happyReduction_172 +happyReduction_172 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut74 happy_x_1 of { happy_var_1 -> + ( checkType happy_var_1)} + ) (\r -> happyReturn (happyIn73 r)) + +happyReduce_173 = happySpecReduce_3 65# happyReduction_173 +happyReduction_173 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut192 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> + case happyOut72 happy_x_3 of { happy_var_3 -> + happyIn74 + (let l = (happy_var_1 <> happy_var_3 <** [happy_var_2]) in TyPred l $ IParam l happy_var_1 happy_var_3 + )}}} + +happyReduce_174 = happySpecReduce_1 65# happyReduction_174 +happyReduction_174 happy_x_1 + = case happyOut72 happy_x_1 of { happy_var_1 -> + happyIn74 + (happy_var_1 + )} + +happyReduce_175 = happyMonadReduce 1# 66# happyReduction_175 +happyReduction_175 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> + ( checkType happy_var_1)} + ) (\r -> happyReturn (happyIn75 r)) + +happyReduce_176 = happySpecReduce_2 67# happyReduction_176 +happyReduction_176 happy_x_2 + happy_x_1 + = case happyOut76 happy_x_1 of { happy_var_1 -> + case happyOut78 happy_x_2 of { happy_var_2 -> + happyIn76 + (TyApp (happy_var_1 <> happy_var_2) happy_var_1 happy_var_2 + )}} + +happyReduce_177 = happySpecReduce_1 67# happyReduction_177 +happyReduction_177 happy_x_1 + = case happyOut78 happy_x_1 of { happy_var_1 -> + happyIn76 + (happy_var_1 + )} + +happyReduce_178 = happyMonadReduce 1# 68# happyReduction_178 +happyReduction_178 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut78 happy_x_1 of { happy_var_1 -> + ( checkType happy_var_1)} + ) (\r -> happyReturn (happyIn77 r)) + +happyReduce_179 = happySpecReduce_1 69# happyReduction_179 +happyReduction_179 happy_x_1 + = case happyOut79 happy_x_1 of { happy_var_1 -> + happyIn78 + (TyCon (ann happy_var_1) happy_var_1 + )} + +happyReduce_180 = happySpecReduce_1 69# happyReduction_180 +happyReduction_180 happy_x_1 + = case happyOut223 happy_x_1 of { happy_var_1 -> + happyIn78 + (TyVar (ann happy_var_1) happy_var_1 + )} + +happyReduce_181 = happySpecReduce_3 69# happyReduction_181 +happyReduction_181 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut85 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn78 + (TyTuple (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse (happy_var_3:snd happy_var_2))) Boxed (reverse (fst happy_var_2)) + )}}} + +happyReduce_182 = happySpecReduce_3 69# happyReduction_182 +happyReduction_182 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> + case happyOut86 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightHashParen) -> + happyIn78 + (TyTuple (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse (happy_var_3:snd happy_var_2))) Unboxed (reverse (fst happy_var_2)) + )}}} + +happyReduce_183 = happySpecReduce_3 69# happyReduction_183 +happyReduction_183 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> + case happyOut74 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightSquare) -> + happyIn78 + (TyList (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 + )}}} + +happyReduce_184 = happySpecReduce_3 69# happyReduction_184 +happyReduction_184 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut83 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn78 + (TyParen (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 + )}}} + +happyReduce_185 = happyReduce 5# 69# happyReduction_185 +happyReduction_185 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut83 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> + case happyOut114 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 RightParen) -> + happyIn78 + (TyKind (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_3,happy_var_5]) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}}} + +happyReduce_186 = happySpecReduce_1 70# happyReduction_186 +happyReduction_186 happy_x_1 + = case happyOut80 happy_x_1 of { happy_var_1 -> + happyIn79 + (happy_var_1 + )} + +happyReduce_187 = happySpecReduce_2 70# happyReduction_187 +happyReduction_187 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightParen) -> + happyIn79 + (unit_tycon_name (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) + )}} + +happyReduce_188 = happySpecReduce_3 70# happyReduction_188 +happyReduction_188 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn79 + (fun_tycon_name (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_2,happy_var_3]) + )}}} + +happyReduce_189 = happySpecReduce_2 70# happyReduction_189 +happyReduction_189 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightSquare) -> + happyIn79 + (list_tycon_name (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) + )}} + +happyReduce_190 = happySpecReduce_3 70# happyReduction_190 +happyReduction_190 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut149 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn79 + (tuple_tycon_name (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse happy_var_2 ++ [happy_var_3])) Boxed (length happy_var_2) + )}}} + +happyReduce_191 = happySpecReduce_2 70# happyReduction_191 +happyReduction_191 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightHashParen) -> + happyIn79 + (unboxed_singleton_tycon_name (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) + )}} + +happyReduce_192 = happySpecReduce_3 70# happyReduction_192 +happyReduction_192 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> + case happyOut149 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightHashParen) -> + happyIn79 + (tuple_tycon_name (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse happy_var_2 ++ [happy_var_3])) Unboxed (length happy_var_2) + )}}} + +happyReduce_193 = happySpecReduce_1 71# happyReduction_193 +happyReduction_193 happy_x_1 + = case happyOut208 happy_x_1 of { happy_var_1 -> + happyIn80 + (happy_var_1 + )} + +happyReduce_194 = happySpecReduce_3 71# happyReduction_194 +happyReduction_194 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut203 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn80 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_195 = happySpecReduce_1 72# happyReduction_195 +happyReduction_195 happy_x_1 + = case happyOut199 happy_x_1 of { happy_var_1 -> + happyIn81 + (happy_var_1 + )} + +happyReduce_196 = happyMonadReduce 1# 73# happyReduction_196 +happyReduction_196 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut83 happy_x_1 of { happy_var_1 -> + ( checkType happy_var_1)} + ) (\r -> happyReturn (happyIn82 r)) + +happyReduce_197 = happyReduce 4# 74# happyReduction_197 +happyReduction_197 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Forall) -> + case happyOut87 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Dot) -> + case happyOut83 happy_x_4 of { happy_var_4 -> + happyIn83 + (TyForall (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) (Just (reverse (fst happy_var_2))) Nothing happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_198 = happySpecReduce_3 74# happyReduction_198 +happyReduction_198 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut84 happy_x_1 of { happy_var_1 -> + case happyOut83 happy_x_3 of { happy_var_3 -> + happyIn83 + (TyForall (happy_var_1 <> happy_var_3) Nothing (Just happy_var_1) happy_var_3 + )}} + +happyReduce_199 = happySpecReduce_1 74# happyReduction_199 +happyReduction_199 happy_x_1 + = case happyOut74 happy_x_1 of { happy_var_1 -> + happyIn83 + (happy_var_1 + )} + +happyReduce_200 = happyMonadReduce 1# 75# happyReduction_200 +happyReduction_200 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> + ( checkPContext happy_var_1)} + ) (\r -> happyReturn (happyIn84 r)) + +happyReduce_201 = happyMonadReduce 3# 75# happyReduction_201 +happyReduction_201 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Tilde) -> + case happyOut76 happy_x_3 of { happy_var_3 -> + ( do { checkEnabled TypeFamilies; + let {l = happy_var_1 <> happy_var_3 <** [happy_var_2]}; + checkPContext (TyPred l $ EqualP l happy_var_1 happy_var_3) })}}} + ) (\r -> happyReturn (happyIn84 r)) + +happyReduce_202 = happySpecReduce_3 76# happyReduction_202 +happyReduction_202 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut86 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut83 happy_x_3 of { happy_var_3 -> + happyIn85 + ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) + )}}} + +happyReduce_203 = happySpecReduce_1 77# happyReduction_203 +happyReduction_203 happy_x_1 + = case happyOut83 happy_x_1 of { happy_var_1 -> + happyIn86 + (([happy_var_1],[]) + )} + +happyReduce_204 = happySpecReduce_3 77# happyReduction_204 +happyReduction_204 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut86 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut83 happy_x_3 of { happy_var_3 -> + happyIn86 + ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) + )}}} + +happyReduce_205 = happySpecReduce_2 78# happyReduction_205 +happyReduction_205 happy_x_2 + happy_x_1 + = case happyOut87 happy_x_1 of { happy_var_1 -> + case happyOut88 happy_x_2 of { happy_var_2 -> + happyIn87 + ((happy_var_2 : fst happy_var_1, Just (snd happy_var_1 <?+> ann happy_var_2)) + )}} + +happyReduce_206 = happySpecReduce_0 78# happyReduction_206 +happyReduction_206 = happyIn87 + (([],Nothing) + ) + +happyReduce_207 = happySpecReduce_1 79# happyReduction_207 +happyReduction_207 happy_x_1 + = case happyOut223 happy_x_1 of { happy_var_1 -> + happyIn88 + (UnkindedVar (ann happy_var_1) happy_var_1 + )} + +happyReduce_208 = happyReduce 5# 79# happyReduction_208 +happyReduction_208 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut223 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleColon) -> + case happyOut114 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 RightParen) -> + happyIn88 + (KindedVar (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_3,happy_var_5]) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}}} + +happyReduce_209 = happySpecReduce_2 80# happyReduction_209 +happyReduction_209 happy_x_2 + happy_x_1 + = case happyOut89 happy_x_1 of { happy_var_1 -> + case happyOut223 happy_x_2 of { happy_var_2 -> + happyIn89 + ((happy_var_2 : fst happy_var_1, Just (snd happy_var_1 <?+> ann happy_var_2)) + )}} + +happyReduce_210 = happySpecReduce_0 80# happyReduction_210 +happyReduction_210 = happyIn89 + (([], Nothing) + ) + +happyReduce_211 = happySpecReduce_2 81# happyReduction_211 +happyReduction_211 happy_x_2 + happy_x_1 + = case happyOut89 happy_x_1 of { happy_var_1 -> + case happyOut223 happy_x_2 of { happy_var_2 -> + happyIn90 + ((happy_var_2 : fst happy_var_1, snd happy_var_1 <?+> ann happy_var_2) + )}} + +happyReduce_212 = happySpecReduce_0 82# happyReduction_212 +happyReduction_212 = happyIn91 + (([],[], Nothing) + ) + +happyReduce_213 = happyMonadReduce 2# 82# happyReduction_213 +happyReduction_213 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Bar) -> + case happyOut92 happy_x_2 of { happy_var_2 -> + ( do { checkEnabled FunctionalDependencies ; + let {(fds,ss,l) = happy_var_2} ; + return (reverse fds, happy_var_1 : reverse ss, Just (nIS happy_var_1 <++> l)) })}} + ) (\r -> happyReturn (happyIn91 r)) + +happyReduce_214 = happySpecReduce_3 83# happyReduction_214 +happyReduction_214 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut92 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut93 happy_x_3 of { happy_var_3 -> + happyIn92 + (let (fds,ss,l) = happy_var_1 in (happy_var_3 : fds, happy_var_2 : ss, l <++> ann happy_var_3) + )}}} + +happyReduce_215 = happySpecReduce_1 83# happyReduction_215 +happyReduction_215 happy_x_1 + = case happyOut93 happy_x_1 of { happy_var_1 -> + happyIn92 + (([happy_var_1],[],ann happy_var_1) + )} + +happyReduce_216 = happySpecReduce_3 84# happyReduction_216 +happyReduction_216 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut90 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> + case happyOut90 happy_x_3 of { happy_var_3 -> + happyIn93 + (FunDep (snd happy_var_1 <++> snd happy_var_3 <** [happy_var_2]) (reverse (fst happy_var_1)) (reverse (fst happy_var_3)) + )}}} + +happyReduce_217 = happyMonadReduce 1# 85# happyReduction_217 +happyReduction_217 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut95 happy_x_1 of { happy_var_1 -> + ( checkEnabled GADTs >> return happy_var_1)} + ) (\r -> happyReturn (happyIn94 r)) + +happyReduce_218 = happySpecReduce_3 86# happyReduction_218 +happyReduction_218 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> + case happyOut96 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> + happyIn95 + ((fst happy_var_2, happy_var_1 : snd happy_var_2 ++ [happy_var_3], happy_var_1 <^^> happy_var_3,True) + )}}} + +happyReduce_219 = happySpecReduce_3 86# happyReduction_219 +happyReduction_219 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut218 happy_x_1 of { happy_var_1 -> + case happyOut96 happy_x_2 of { happy_var_2 -> + case happyOut219 happy_x_3 of { happy_var_3 -> + happyIn95 + ((fst happy_var_2, happy_var_1 : snd happy_var_2 ++ [happy_var_3], happy_var_1 <^^> happy_var_3,False) + )}}} + +happyReduce_220 = happySpecReduce_3 87# happyReduction_220 +happyReduction_220 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut97 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn96 + ((fst happy_var_2, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3) + )}}} + +happyReduce_221 = happySpecReduce_3 88# happyReduction_221 +happyReduction_221 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut97 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOut98 happy_x_3 of { happy_var_3 -> + happyIn97 + ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) + )}}} + +happyReduce_222 = happySpecReduce_1 88# happyReduction_222 +happyReduction_222 happy_x_1 + = case happyOut98 happy_x_1 of { happy_var_1 -> + happyIn97 + (([happy_var_1],[]) + )} + +happyReduce_223 = happyMonadReduce 3# 89# happyReduction_223 +happyReduction_223 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut194 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> + case happyOut82 happy_x_3 of { happy_var_3 -> + ( do { c <- checkUnQual happy_var_1; + return $ GadtDecl (happy_var_1 <> happy_var_3 <** [happy_var_2]) c happy_var_3 })}}} + ) (\r -> happyReturn (happyIn98 r)) + +happyReduce_224 = happyMonadReduce 0# 90# happyReduction_224 +happyReduction_224 (happyRest) tk + = happyThen (( checkEnabled EmptyDataDecls >> return ([],[],Nothing)) + ) (\r -> happyReturn (happyIn99 r)) + +happyReduce_225 = happySpecReduce_2 90# happyReduction_225 +happyReduction_225 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Equals) -> + case happyOut100 happy_x_2 of { happy_var_2 -> + happyIn99 + (let (ds,ss,l) = happy_var_2 in (ds, happy_var_1 : reverse ss, Just $ nIS happy_var_1 <++> l) + )}} + +happyReduce_226 = happySpecReduce_3 91# happyReduction_226 +happyReduction_226 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut100 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> + case happyOut101 happy_x_3 of { happy_var_3 -> + happyIn100 + (let (ds,ss,l) = happy_var_1 in (happy_var_3 : ds, happy_var_2 : ss, l <++> ann happy_var_3) + )}}} + +happyReduce_227 = happySpecReduce_1 91# happyReduction_227 +happyReduction_227 happy_x_1 + = case happyOut101 happy_x_1 of { happy_var_1 -> + happyIn100 + (([happy_var_1],[],ann happy_var_1) + )} + +happyReduce_228 = happyMonadReduce 4# 92# happyReduction_228 +happyReduction_228 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut84 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 DoubleArrow) -> + case happyOut103 happy_x_4 of { happy_var_4 -> + ( do { checkEnabled ExistentialQuantification ; + ctxt <- checkContext (Just happy_var_2) ; + let {(mtvs,ss,ml) = happy_var_1} ; + return $ QualConDecl (ml <?+> ann happy_var_4 <** (ss ++ [happy_var_3])) mtvs ctxt happy_var_4 })}}}} + ) (\r -> happyReturn (happyIn101 r)) + +happyReduce_229 = happySpecReduce_2 92# happyReduction_229 +happyReduction_229 happy_x_2 + happy_x_1 + = case happyOut102 happy_x_1 of { happy_var_1 -> + case happyOut103 happy_x_2 of { happy_var_2 -> + happyIn101 + (let (mtvs, ss, ml) = happy_var_1 in QualConDecl (ml <?+> ann happy_var_2 <** ss) mtvs Nothing happy_var_2 + )}} + +happyReduce_230 = happyMonadReduce 3# 93# happyReduction_230 +happyReduction_230 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Forall) -> + case happyOut87 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Dot) -> + ( checkEnabled ExistentialQuantification >> return (Just (fst happy_var_2), [happy_var_1,happy_var_3], Just $ happy_var_1 <^^> happy_var_3))}}} + ) (\r -> happyReturn (happyIn102 r)) + +happyReduce_231 = happySpecReduce_0 93# happyReduction_231 +happyReduction_231 = happyIn102 + ((Nothing, [], Nothing) + ) + +happyReduce_232 = happySpecReduce_1 94# happyReduction_232 +happyReduction_232 happy_x_1 + = case happyOut104 happy_x_1 of { happy_var_1 -> + happyIn103 + (let (n,ts,l) = happy_var_1 in ConDecl l n ts + )} + +happyReduce_233 = happySpecReduce_3 94# happyReduction_233 +happyReduction_233 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut107 happy_x_1 of { happy_var_1 -> + case happyOut198 happy_x_2 of { happy_var_2 -> + case happyOut107 happy_x_3 of { happy_var_3 -> + happyIn103 + (InfixConDecl (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_234 = happyMonadReduce 3# 94# happyReduction_234 +happyReduction_234 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut194 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> + ( do { c <- checkUnQual happy_var_1; return $ RecDecl (ann happy_var_1 <++> nIS happy_var_3 <** [happy_var_2,happy_var_3]) c [] })}}} + ) (\r -> happyReturn (happyIn103 r)) + +happyReduce_235 = happyMonadReduce 4# 94# happyReduction_235 +happyReduction_235 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut194 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> + case happyOut108 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> + ( do { c <- checkUnQual happy_var_1; + return $ RecDecl (ann happy_var_1 <++> nIS happy_var_4 <** (happy_var_2:reverse (snd happy_var_3) ++ [happy_var_4])) c (reverse (fst happy_var_3)) })}}}} + ) (\r -> happyReturn (happyIn103 r)) + +happyReduce_236 = happyMonadReduce 1# 95# happyReduction_236 +happyReduction_236 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> + ( do { (c,ts) <- splitTyConApp happy_var_1; + return (c,map (\t -> UnBangedTy (ann t) t) ts,ann happy_var_1) })} + ) (\r -> happyReturn (happyIn104 r)) + +happyReduce_237 = happySpecReduce_1 95# happyReduction_237 +happyReduction_237 happy_x_1 + = case happyOut105 happy_x_1 of { happy_var_1 -> + happyIn104 + (happy_var_1 + )} + +happyReduce_238 = happyMonadReduce 3# 96# happyReduction_238 +happyReduction_238 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Exclamation) -> + case happyOut77 happy_x_3 of { happy_var_3 -> + ( do { (c,ts) <- splitTyConApp happy_var_1; + return (c,map (\t -> UnBangedTy (ann t) t) ts++ + [BangedTy (nIS happy_var_2 <++> ann happy_var_3) happy_var_3], happy_var_1 <> happy_var_3) })}}} + ) (\r -> happyReturn (happyIn105 r)) + +happyReduce_239 = happyMonadReduce 5# 96# happyReduction_239 +happyReduction_239 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut76 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 UNPACK) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 Exclamation) -> + case happyOut77 happy_x_5 of { happy_var_5 -> + ( do { (c,ts) <- splitTyConApp happy_var_1; + return (c,map (\t -> UnBangedTy (ann t) t) ts++ + [UnpackedTy (nIS happy_var_2 <++> ann happy_var_5 <** [happy_var_3,happy_var_4]) happy_var_5], happy_var_1 <> happy_var_5) })}}}}} + ) (\r -> happyReturn (happyIn105 r)) + +happyReduce_240 = happySpecReduce_2 96# happyReduction_240 +happyReduction_240 happy_x_2 + happy_x_1 + = case happyOut105 happy_x_1 of { happy_var_1 -> + case happyOut106 happy_x_2 of { happy_var_2 -> + happyIn105 + (let (n,ts,l) = happy_var_1 in (n, ts ++ [happy_var_2],l <++> ann happy_var_2) + )}} + +happyReduce_241 = happySpecReduce_1 97# happyReduction_241 +happyReduction_241 happy_x_1 + = case happyOut77 happy_x_1 of { happy_var_1 -> + happyIn106 + (UnBangedTy (ann happy_var_1) happy_var_1 + )} + +happyReduce_242 = happySpecReduce_2 97# happyReduction_242 +happyReduction_242 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + case happyOut77 happy_x_2 of { happy_var_2 -> + happyIn106 + (BangedTy (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_243 = happyReduce 4# 97# happyReduction_243 +happyReduction_243 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 UNPACK) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 PragmaEnd) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Exclamation) -> + case happyOut77 happy_x_4 of { happy_var_4 -> + happyIn106 + (UnpackedTy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_244 = happySpecReduce_1 98# happyReduction_244 +happyReduction_244 happy_x_1 + = case happyOut75 happy_x_1 of { happy_var_1 -> + happyIn107 + (UnBangedTy (ann happy_var_1) happy_var_1 + )} + +happyReduce_245 = happySpecReduce_2 98# happyReduction_245 +happyReduction_245 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + case happyOut77 happy_x_2 of { happy_var_2 -> + happyIn107 + (BangedTy (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_246 = happyReduce 4# 98# happyReduction_246 +happyReduction_246 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 UNPACK) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 PragmaEnd) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Exclamation) -> + case happyOut77 happy_x_4 of { happy_var_4 -> + happyIn107 + (UnpackedTy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_247 = happySpecReduce_3 99# happyReduction_247 +happyReduction_247 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut108 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut109 happy_x_3 of { happy_var_3 -> + happyIn108 + ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) + )}}} + +happyReduce_248 = happySpecReduce_1 99# happyReduction_248 +happyReduction_248 happy_x_1 + = case happyOut109 happy_x_1 of { happy_var_1 -> + happyIn108 + (([happy_var_1],[]) + )} + +happyReduce_249 = happySpecReduce_3 100# happyReduction_249 +happyReduction_249 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut57 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> + case happyOut110 happy_x_3 of { happy_var_3 -> + happyIn109 + (let (ns,ss,l) = happy_var_1 in FieldDecl (l <++> ann happy_var_3 <** (reverse ss ++ [happy_var_2])) (reverse ns) happy_var_3 + )}}} + +happyReduce_250 = happySpecReduce_1 101# happyReduction_250 +happyReduction_250 happy_x_1 + = case happyOut82 happy_x_1 of { happy_var_1 -> + happyIn110 + (UnBangedTy (ann happy_var_1) happy_var_1 + )} + +happyReduce_251 = happySpecReduce_2 101# happyReduction_251 +happyReduction_251 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + case happyOut77 happy_x_2 of { happy_var_2 -> + happyIn110 + (BangedTy (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_252 = happyReduce 4# 101# happyReduction_252 +happyReduction_252 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 UNPACK) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 PragmaEnd) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Exclamation) -> + case happyOut77 happy_x_4 of { happy_var_4 -> + happyIn110 + (UnpackedTy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_253 = happySpecReduce_0 102# happyReduction_253 +happyReduction_253 = happyIn111 + ((Nothing,[],Nothing) + ) + +happyReduce_254 = happySpecReduce_2 102# happyReduction_254 +happyReduction_254 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> + case happyOut113 happy_x_2 of { happy_var_2 -> + happyIn111 + (let l = nIS happy_var_1 <++> ann happy_var_2 in (Just [Deriving l happy_var_2 []], [happy_var_1], Just l) + )}} + +happyReduce_255 = happySpecReduce_3 102# happyReduction_255 +happyReduction_255 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn111 + ((Just [], [happy_var_1,happy_var_2,happy_var_3], Just $ happy_var_1 <^^> happy_var_3) + )}}} + +happyReduce_256 = happyReduce 4# 102# happyReduction_256 +happyReduction_256 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftParen) -> + case happyOut112 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn111 + ((Just $ reverse (fst happy_var_3), happy_var_1:happy_var_2:snd happy_var_3 ++ [happy_var_4], Just $ happy_var_1 <^^> happy_var_4) + ) `HappyStk` happyRest}}}} + +happyReduce_257 = happyMonadReduce 1# 103# happyReduction_257 +happyReduction_257 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut86 happy_x_1 of { happy_var_1 -> + ( checkDeriving (fst happy_var_1) >>= \ds -> return (ds, snd happy_var_1))} + ) (\r -> happyReturn (happyIn112 r)) + +happyReduce_258 = happySpecReduce_1 104# happyReduction_258 +happyReduction_258 happy_x_1 + = case happyOut208 happy_x_1 of { happy_var_1 -> + happyIn113 + (happy_var_1 + )} + +happyReduce_259 = happyMonadReduce 1# 105# happyReduction_259 +happyReduction_259 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut115 happy_x_1 of { happy_var_1 -> + ( checkEnabled KindSignatures >> return happy_var_1)} + ) (\r -> happyReturn (happyIn114 r)) + +happyReduce_260 = happySpecReduce_1 106# happyReduction_260 +happyReduction_260 happy_x_1 + = case happyOut116 happy_x_1 of { happy_var_1 -> + happyIn115 + (happy_var_1 + )} + +happyReduce_261 = happySpecReduce_3 106# happyReduction_261 +happyReduction_261 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut116 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> + case happyOut115 happy_x_3 of { happy_var_3 -> + happyIn115 + (KindFn (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_262 = happySpecReduce_1 107# happyReduction_262 +happyReduction_262 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Star) -> + happyIn116 + (KindStar (nIS happy_var_1) + )} + +happyReduce_263 = happySpecReduce_1 107# happyReduction_263 +happyReduction_263 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + happyIn116 + (KindBang (nIS happy_var_1) + )} + +happyReduce_264 = happySpecReduce_3 107# happyReduction_264 +happyReduction_264 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut115 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn116 + (KindParen (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 + )}}} + +happyReduce_265 = happySpecReduce_0 108# happyReduction_265 +happyReduction_265 = happyIn117 + ((Nothing,[]) + ) + +happyReduce_266 = happySpecReduce_2 108# happyReduction_266 +happyReduction_266 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 DoubleColon) -> + case happyOut114 happy_x_2 of { happy_var_2 -> + happyIn117 + ((Just happy_var_2,[happy_var_1]) + )}} + +happyReduce_267 = happyMonadReduce 4# 109# happyReduction_267 +happyReduction_267 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> + case happyOut119 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> + ( checkClassBody (fst happy_var_3) >>= \vs -> return (Just vs, happy_var_1:happy_var_2: snd happy_var_3 ++ [happy_var_4], Just (happy_var_1 <^^> happy_var_4),True))}}}} + ) (\r -> happyReturn (happyIn118 r)) + +happyReduce_268 = happyMonadReduce 4# 109# happyReduction_268 +happyReduction_268 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> + case happyOut218 happy_x_2 of { happy_var_2 -> + case happyOut119 happy_x_3 of { happy_var_3 -> + case happyOut219 happy_x_4 of { happy_var_4 -> + ( checkClassBody (fst happy_var_3) >>= \vs -> return (Just vs, happy_var_1:happy_var_2: snd happy_var_3 ++ [happy_var_4], Just (happy_var_1 <^^> happy_var_4),False))}}}} + ) (\r -> happyReturn (happyIn118 r)) + +happyReduce_269 = happySpecReduce_0 109# happyReduction_269 +happyReduction_269 = happyIn118 + ((Nothing,[],Nothing,False) + ) + +happyReduce_270 = happyMonadReduce 3# 110# happyReduction_270 +happyReduction_270 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut120 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + ( checkRevClsDecls (fst happy_var_2) >>= \cs -> return (cs, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3))}}} + ) (\r -> happyReturn (happyIn119 r)) + +happyReduce_271 = happySpecReduce_1 110# happyReduction_271 +happyReduction_271 happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn119 + (([],reverse happy_var_1) + )} + +happyReduce_272 = happySpecReduce_3 111# happyReduction_272 +happyReduction_272 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut120 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOut121 happy_x_3 of { happy_var_3 -> + happyIn120 + ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) + )}}} + +happyReduce_273 = happySpecReduce_1 111# happyReduction_273 +happyReduction_273 happy_x_1 + = case happyOut121 happy_x_1 of { happy_var_1 -> + happyIn120 + (([happy_var_1],[]) + )} + +happyReduce_274 = happySpecReduce_1 112# happyReduction_274 +happyReduction_274 happy_x_1 + = case happyOut51 happy_x_1 of { happy_var_1 -> + happyIn121 + (ClsDecl (ann happy_var_1) happy_var_1 + )} + +happyReduce_275 = happyMonadReduce 1# 112# happyReduction_275 +happyReduction_275 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut122 happy_x_1 of { happy_var_1 -> + ( checkEnabled TypeFamilies >> return happy_var_1)} + ) (\r -> happyReturn (happyIn121 r)) + +happyReduce_276 = happyMonadReduce 3# 113# happyReduction_276 +happyReduction_276 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> + case happyOut74 happy_x_2 of { happy_var_2 -> + case happyOut117 happy_x_3 of { happy_var_3 -> + ( do { (c,ts) <- checkSimpleType happy_var_2; + return (ClsTyFam (nIS happy_var_1 <++> ann happy_var_2 <+?> (fmap ann) (fst happy_var_3) <** happy_var_1:snd happy_var_3) c ts (fst happy_var_3)) })}}} + ) (\r -> happyReturn (happyIn122 r)) + +happyReduce_277 = happyReduce 4# 113# happyReduction_277 +happyReduction_277 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> + case happyOut71 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Equals) -> + case happyOut82 happy_x_4 of { happy_var_4 -> + happyIn122 + (ClsTyDef (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_278 = happyMonadReduce 3# 113# happyReduction_278 +happyReduction_278 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Data) -> + case happyOut83 happy_x_2 of { happy_var_2 -> + case happyOut117 happy_x_3 of { happy_var_3 -> + ( do { (cs,c,t) <- checkDataHeader happy_var_2; + return (ClsDataFam (nIS happy_var_1 <++> ann happy_var_2 <+?> (fmap ann) (fst happy_var_3) <** happy_var_1:snd happy_var_3) cs c t (fst happy_var_3)) })}}} + ) (\r -> happyReturn (happyIn122 r)) + +happyReduce_279 = happyMonadReduce 4# 114# happyReduction_279 +happyReduction_279 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> + case happyOut124 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> + ( checkInstBody (fst happy_var_3) >>= \vs -> return (Just vs, happy_var_1:happy_var_2: snd happy_var_3 ++ [happy_var_4], Just (happy_var_1 <^^> happy_var_4),True))}}}} + ) (\r -> happyReturn (happyIn123 r)) + +happyReduce_280 = happyMonadReduce 4# 114# happyReduction_280 +happyReduction_280 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> + case happyOut218 happy_x_2 of { happy_var_2 -> + case happyOut124 happy_x_3 of { happy_var_3 -> + case happyOut219 happy_x_4 of { happy_var_4 -> + ( checkInstBody (fst happy_var_3) >>= \vs -> return (Just vs, happy_var_1:happy_var_2: snd happy_var_3 ++ [happy_var_4], Just (happy_var_1 <^^> happy_var_4),False))}}}} + ) (\r -> happyReturn (happyIn123 r)) + +happyReduce_281 = happySpecReduce_0 114# happyReduction_281 +happyReduction_281 = happyIn123 + ((Nothing, [], Nothing, False) + ) + +happyReduce_282 = happyMonadReduce 3# 115# happyReduction_282 +happyReduction_282 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut125 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + ( checkRevInstDecls (fst happy_var_2) >>= \is -> return (is, reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3))}}} + ) (\r -> happyReturn (happyIn124 r)) + +happyReduce_283 = happySpecReduce_1 115# happyReduction_283 +happyReduction_283 happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + happyIn124 + (([],reverse happy_var_1) + )} + +happyReduce_284 = happySpecReduce_3 116# happyReduction_284 +happyReduction_284 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut125 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOut126 happy_x_3 of { happy_var_3 -> + happyIn125 + ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) + )}}} + +happyReduce_285 = happySpecReduce_1 116# happyReduction_285 +happyReduction_285 happy_x_1 + = case happyOut126 happy_x_1 of { happy_var_1 -> + happyIn125 + (([happy_var_1],[]) + )} + +happyReduce_286 = happySpecReduce_1 117# happyReduction_286 +happyReduction_286 happy_x_1 + = case happyOut129 happy_x_1 of { happy_var_1 -> + happyIn126 + (InsDecl (ann happy_var_1) happy_var_1 + )} + +happyReduce_287 = happyMonadReduce 1# 117# happyReduction_287 +happyReduction_287 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut128 happy_x_1 of { happy_var_1 -> + ( checkEnabled TypeFamilies >> return happy_var_1)} + ) (\r -> happyReturn (happyIn126 r)) + +happyReduce_288 = happySpecReduce_1 117# happyReduction_288 +happyReduction_288 happy_x_1 + = case happyOut127 happy_x_1 of { happy_var_1 -> + happyIn126 + (happy_var_1 + )} + +happyReduce_289 = happyReduce 4# 118# happyReduction_289 +happyReduction_289 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut63 happy_x_2 of { happy_var_2 -> + case happyOut191 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 PragmaEnd) -> + happyIn127 + (let Loc l (INLINE s) = happy_var_1 in InsInline (l <^^> happy_var_4 <** [l,happy_var_4]) s happy_var_2 happy_var_3 + ) `HappyStk` happyRest}}}} + +happyReduce_290 = happyMonadReduce 4# 119# happyReduction_290 +happyReduction_290 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> + case happyOut71 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Equals) -> + case happyOut82 happy_x_4 of { happy_var_4 -> + ( do { -- no checkSimpleType happy_var_4 since dtype may contain type patterns + return (InsType (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4) })}}}} + ) (\r -> happyReturn (happyIn128 r)) + +happyReduce_291 = happyMonadReduce 4# 119# happyReduction_291 +happyReduction_291 (happy_x_4 `HappyStk` + 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 happyOut82 happy_x_2 of { happy_var_2 -> + case happyOut99 happy_x_3 of { happy_var_3 -> + case happyOut111 happy_x_4 of { happy_var_4 -> + ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; + let {(ds,ss1,minf1) = happy_var_3 ; (mds,ss2,minf2) = happy_var_4}; + checkDataOrNew happy_var_1 ds; + return (InsData (happy_var_1 <> happy_var_2 <+?> minf1 <+?> minf2 <** (ss1 ++ ss2)) happy_var_1 happy_var_2 (reverse ds) mds) })}}}} + ) (\r -> happyReturn (happyIn128 r)) + +happyReduce_292 = happyMonadReduce 6# 119# happyReduction_292 +happyReduction_292 (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 happyOut47 happy_x_1 of { happy_var_1 -> + case happyOut82 happy_x_2 of { happy_var_2 -> + case happyOut117 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 KW_Where) -> + case happyOut94 happy_x_5 of { happy_var_5 -> + case happyOut111 happy_x_6 of { happy_var_6 -> + ( do { -- (cs,c,t) <- checkDataHeader happy_var_4; + let { (gs,ss1,inf,b) = happy_var_5 ; (mds,ss2,minf) = happy_var_6 } ; + checkDataOrNew happy_var_1 gs; + return $ InsGData (ann happy_var_1 <++> inf <+?> minf <** (snd happy_var_3 ++ happy_var_4:ss1 ++ ss2) <?? b) happy_var_1 happy_var_2 (fst happy_var_3) (reverse gs) mds })}}}}}} + ) (\r -> happyReturn (happyIn128 r)) + +happyReduce_293 = happyMonadReduce 4# 120# happyReduction_293 +happyReduction_293 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOut131 happy_x_2 of { happy_var_2 -> + case happyOut132 happy_x_3 of { happy_var_3 -> + case happyOut130 happy_x_4 of { happy_var_4 -> + ( checkValDef ((happy_var_1 <> happy_var_3 <+?> (fmap ann) (fst happy_var_4)) <** (snd happy_var_2 ++ snd happy_var_4)) happy_var_1 (fst happy_var_2) happy_var_3 (fst happy_var_4))}}}} + ) (\r -> happyReturn (happyIn129 r)) + +happyReduce_294 = happyMonadReduce 4# 120# happyReduction_294 +happyReduction_294 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + case happyOut146 happy_x_2 of { happy_var_2 -> + case happyOut132 happy_x_3 of { happy_var_3 -> + case happyOut130 happy_x_4 of { happy_var_4 -> + ( do { checkEnabled BangPatterns ; + p <- checkPattern happy_var_2; + return $ PatBind ((nIS happy_var_1 <++> ann happy_var_3 <+?> (fmap ann) (fst happy_var_4)) <** happy_var_1:snd happy_var_4) + p Nothing happy_var_3 (fst happy_var_4) })}}}} + ) (\r -> happyReturn (happyIn129 r)) + +happyReduce_295 = happySpecReduce_2 121# happyReduction_295 +happyReduction_295 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> + case happyOut56 happy_x_2 of { happy_var_2 -> + happyIn130 + ((Just happy_var_2, [happy_var_1]) + )}} + +happyReduce_296 = happySpecReduce_0 121# happyReduction_296 +happyReduction_296 = happyIn130 + ((Nothing, []) + ) + +happyReduce_297 = happyMonadReduce 2# 122# happyReduction_297 +happyReduction_297 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 DoubleColon) -> + case happyOut82 happy_x_2 of { happy_var_2 -> + ( checkEnabled ScopedTypeVariables >> return (Just happy_var_2, [happy_var_1]))}} + ) (\r -> happyReturn (happyIn131 r)) + +happyReduce_298 = happySpecReduce_0 122# happyReduction_298 +happyReduction_298 = happyIn131 + ((Nothing,[]) + ) + +happyReduce_299 = happySpecReduce_2 123# happyReduction_299 +happyReduction_299 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Equals) -> + case happyOut135 happy_x_2 of { happy_var_2 -> + happyIn132 + (UnGuardedRhs (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_300 = happySpecReduce_1 123# happyReduction_300 +happyReduction_300 happy_x_1 + = case happyOut133 happy_x_1 of { happy_var_1 -> + happyIn132 + (GuardedRhss (snd happy_var_1) (reverse $ fst happy_var_1) + )} + +happyReduce_301 = happySpecReduce_2 124# happyReduction_301 +happyReduction_301 happy_x_2 + happy_x_1 + = case happyOut133 happy_x_1 of { happy_var_1 -> + case happyOut134 happy_x_2 of { happy_var_2 -> + happyIn133 + ((happy_var_2 : fst happy_var_1, snd happy_var_1 <++> ann happy_var_2) + )}} + +happyReduce_302 = happySpecReduce_1 124# happyReduction_302 +happyReduction_302 happy_x_1 + = case happyOut134 happy_x_1 of { happy_var_1 -> + happyIn133 + (([happy_var_1],ann happy_var_1) + )} + +happyReduce_303 = happyMonadReduce 4# 125# happyReduction_303 +happyReduction_303 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Bar) -> + case happyOut169 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Equals) -> + case happyOut135 happy_x_4 of { happy_var_4 -> + ( do { checkPatternGuards (fst happy_var_2); + return $ GuardedRhs (nIS happy_var_1 <++> ann happy_var_4 <** (happy_var_1:snd happy_var_2 ++ [happy_var_3])) (reverse (fst happy_var_2)) happy_var_4 })}}}} + ) (\r -> happyReturn (happyIn134 r)) + +happyReduce_304 = happyMonadReduce 1# 126# happyReduction_304 +happyReduction_304 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut136 happy_x_1 of { happy_var_1 -> + ( checkExpr happy_var_1)} + ) (\r -> happyReturn (happyIn135 r)) + +happyReduce_305 = happySpecReduce_3 127# happyReduction_305 +happyReduction_305 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 DoubleColon) -> + case happyOut82 happy_x_3 of { happy_var_3 -> + happyIn136 + (ExpTypeSig (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_306 = happySpecReduce_1 127# happyReduction_306 +happyReduction_306 happy_x_1 + = case happyOut137 happy_x_1 of { happy_var_1 -> + happyIn136 + (happy_var_1 + )} + +happyReduce_307 = happySpecReduce_2 127# happyReduction_307 +happyReduction_307 happy_x_2 + happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOut201 happy_x_2 of { happy_var_2 -> + happyIn136 + (PostOp (happy_var_1 <> happy_var_2) happy_var_1 happy_var_2 + )}} + +happyReduce_308 = happySpecReduce_3 127# happyReduction_308 +happyReduction_308 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftArrowTail) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn136 + (LeftArrApp (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_309 = happySpecReduce_3 127# happyReduction_309 +happyReduction_309 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrowTail) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn136 + (RightArrApp (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_310 = happySpecReduce_3 127# happyReduction_310 +happyReduction_310 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftDblArrowTail) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn136 + (LeftArrHighApp (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_311 = happySpecReduce_3 127# happyReduction_311 +happyReduction_311 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightDblArrowTail) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn136 + (RightArrHighApp (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_312 = happySpecReduce_1 128# happyReduction_312 +happyReduction_312 happy_x_1 + = case happyOut138 happy_x_1 of { happy_var_1 -> + happyIn137 + (happy_var_1 + )} + +happyReduce_313 = happySpecReduce_1 128# happyReduction_313 +happyReduction_313 happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + happyIn137 + (happy_var_1 + )} + +happyReduce_314 = happySpecReduce_3 129# happyReduction_314 +happyReduction_314 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOut201 happy_x_2 of { happy_var_2 -> + case happyOut140 happy_x_3 of { happy_var_3 -> + happyIn138 + (InfixApp (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_315 = happySpecReduce_1 129# happyReduction_315 +happyReduction_315 happy_x_1 + = case happyOut140 happy_x_1 of { happy_var_1 -> + happyIn138 + (happy_var_1 + )} + +happyReduce_316 = happySpecReduce_3 130# happyReduction_316 +happyReduction_316 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut139 happy_x_1 of { happy_var_1 -> + case happyOut201 happy_x_2 of { happy_var_2 -> + case happyOut141 happy_x_3 of { happy_var_3 -> + happyIn139 + (InfixApp (happy_var_1 <> happy_var_3) happy_var_1 happy_var_2 happy_var_3 + )}}} + +happyReduce_317 = happySpecReduce_1 130# happyReduction_317 +happyReduction_317 happy_x_1 + = case happyOut141 happy_x_1 of { happy_var_1 -> + happyIn139 + (happy_var_1 + )} + +happyReduce_318 = happyReduce 4# 131# happyReduction_318 +happyReduction_318 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Backslash) -> + case happyOut144 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightArrow) -> + case happyOut136 happy_x_4 of { happy_var_4 -> + happyIn140 + (Lambda (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) (reverse happy_var_2) happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_319 = happyReduce 4# 131# happyReduction_319 +happyReduction_319 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Let) -> + case happyOut56 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_In) -> + case happyOut136 happy_x_4 of { happy_var_4 -> + happyIn140 + (Let (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_320 = happyReduce 6# 131# happyReduction_320 +happyReduction_320 (happy_x_6 `HappyStk` + happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_If) -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_Then) -> + case happyOut136 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 KW_Else) -> + case happyOut136 happy_x_6 of { happy_var_6 -> + happyIn140 + (If (nIS happy_var_1 <++> ann happy_var_6 <** [happy_var_1,happy_var_3,happy_var_5]) happy_var_2 happy_var_4 happy_var_6 + ) `HappyStk` happyRest}}}}}} + +happyReduce_321 = happyReduce 4# 131# happyReduction_321 +happyReduction_321 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Proc) -> + case happyOut145 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightArrow) -> + case happyOut136 happy_x_4 of { happy_var_4 -> + happyIn140 + (Proc (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_322 = happySpecReduce_1 131# happyReduction_322 +happyReduction_322 happy_x_1 + = case happyOut142 happy_x_1 of { happy_var_1 -> + happyIn140 + (happy_var_1 + )} + +happyReduce_323 = happyReduce 4# 132# happyReduction_323 +happyReduction_323 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Case) -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_Of) -> + case happyOut171 happy_x_4 of { happy_var_4 -> + happyIn141 + (let (als, inf, ss, b) = happy_var_4 in Case (nIS happy_var_1 <++> inf <** (happy_var_1:happy_var_3:ss) <?? b) happy_var_2 als + ) `HappyStk` happyRest}}}} + +happyReduce_324 = happySpecReduce_2 132# happyReduction_324 +happyReduction_324 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Minus) -> + case happyOut143 happy_x_2 of { happy_var_2 -> + happyIn141 + (NegApp (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_325 = happySpecReduce_2 132# happyReduction_325 +happyReduction_325 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Do) -> + case happyOut179 happy_x_2 of { happy_var_2 -> + happyIn141 + (let (sts, inf, ss, b) = happy_var_2 in Do (nIS happy_var_1 <++> inf <** happy_var_1:ss <?? b) sts + )}} + +happyReduce_326 = happySpecReduce_2 132# happyReduction_326 +happyReduction_326 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_MDo) -> + case happyOut179 happy_x_2 of { happy_var_2 -> + happyIn141 + (let (sts, inf, ss, b) = happy_var_2 in MDo (nIS happy_var_1 <++> inf <** happy_var_1:ss <?? b) sts + )}} + +happyReduce_327 = happySpecReduce_1 132# happyReduction_327 +happyReduction_327 happy_x_1 + = case happyOut143 happy_x_1 of { happy_var_1 -> + happyIn141 + (happy_var_1 + )} + +happyReduce_328 = happyReduce 4# 133# happyReduction_328 +happyReduction_328 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 CORE) -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + case happyOut136 happy_x_4 of { happy_var_4 -> + happyIn142 + (let Loc l (StringTok s) = happy_var_2 in CorePragma (nIS happy_var_1 <++> ann happy_var_4 <** [l,happy_var_3]) s happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_329 = happyReduce 4# 133# happyReduction_329 +happyReduction_329 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 SCC) -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 PragmaEnd) -> + case happyOut136 happy_x_4 of { happy_var_4 -> + happyIn142 + (let Loc l (StringTok s) = happy_var_2 in SCCPragma (nIS happy_var_1 <++> ann happy_var_4 <** [l,happy_var_3]) s happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_330 = happyReduce 11# 133# happyReduction_330 +happyReduction_330 (happy_x_11 `HappyStk` + 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) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 GENERATED) -> + case happyOutTok happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 Colon) -> + case happyOutTok happy_x_5 of { happy_var_5 -> + case happyOutTok happy_x_6 of { (Loc happy_var_6 Minus) -> + case happyOutTok happy_x_7 of { happy_var_7 -> + case happyOutTok happy_x_8 of { (Loc happy_var_8 Colon) -> + case happyOutTok happy_x_9 of { happy_var_9 -> + case happyOutTok happy_x_10 of { (Loc happy_var_10 PragmaEnd) -> + case happyOut136 happy_x_11 of { happy_var_11 -> + happyIn142 + (let { Loc l0 (StringTok s) = happy_var_2; + Loc l1 (IntTok i1) = happy_var_3; + Loc l2 (IntTok i2) = happy_var_5; + Loc l3 (IntTok i3) = happy_var_7; + Loc l4 (IntTok i4) = happy_var_9} + in GenPragma (nIS happy_var_1 <++> ann happy_var_11 <** [happy_var_1,l0,l1,happy_var_4,l2,happy_var_6,l3,happy_var_8,l4,happy_var_10]) + s (fromInteger i1, fromInteger i2) + (fromInteger i3, fromInteger i4) happy_var_11 + ) `HappyStk` happyRest}}}}}}}}}}} + +happyReduce_331 = happySpecReduce_2 134# happyReduction_331 +happyReduction_331 happy_x_2 + happy_x_1 + = case happyOut143 happy_x_1 of { happy_var_1 -> + case happyOut146 happy_x_2 of { happy_var_2 -> + happyIn143 + (App (happy_var_1 <> happy_var_2) happy_var_1 happy_var_2 + )}} + +happyReduce_332 = happySpecReduce_1 134# happyReduction_332 +happyReduction_332 happy_x_1 + = case happyOut146 happy_x_1 of { happy_var_1 -> + happyIn143 + (happy_var_1 + )} + +happyReduce_333 = happySpecReduce_2 135# happyReduction_333 +happyReduction_333 happy_x_2 + happy_x_1 + = case happyOut144 happy_x_1 of { happy_var_1 -> + case happyOut145 happy_x_2 of { happy_var_2 -> + happyIn144 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_334 = happySpecReduce_1 135# happyReduction_334 +happyReduction_334 happy_x_1 + = case happyOut145 happy_x_1 of { happy_var_1 -> + happyIn144 + ([happy_var_1] + )} + +happyReduce_335 = happyMonadReduce 1# 136# happyReduction_335 +happyReduction_335 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut146 happy_x_1 of { happy_var_1 -> + ( checkPattern happy_var_1)} + ) (\r -> happyReturn (happyIn145 r)) + +happyReduce_336 = happyMonadReduce 2# 136# happyReduction_336 +happyReduction_336 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + case happyOut146 happy_x_2 of { happy_var_2 -> + ( checkPattern (BangPat (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2))}} + ) (\r -> happyReturn (happyIn145 r)) + +happyReduce_337 = happyMonadReduce 3# 137# happyReduction_337 +happyReduction_337 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut191 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 At) -> + case happyOut146 happy_x_3 of { happy_var_3 -> + ( do { n <- checkUnQual happy_var_1; + return (AsPat (happy_var_1 <> happy_var_3 <** [happy_var_2]) n happy_var_3) })}}} + ) (\r -> happyReturn (happyIn146 r)) + +happyReduce_338 = happyMonadReduce 3# 137# happyReduction_338 +happyReduction_338 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut191 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RPCAt) -> + case happyOut146 happy_x_3 of { happy_var_3 -> + ( do { n <- checkUnQual happy_var_1; + return (CAsRP (happy_var_1 <> happy_var_3 <** [happy_var_2]) n happy_var_3) })}}} + ) (\r -> happyReturn (happyIn146 r)) + +happyReduce_339 = happySpecReduce_2 137# happyReduction_339 +happyReduction_339 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Tilde) -> + case happyOut146 happy_x_2 of { happy_var_2 -> + happyIn146 + (IrrPat (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_340 = happySpecReduce_1 137# happyReduction_340 +happyReduction_340 happy_x_1 + = case happyOut147 happy_x_1 of { happy_var_1 -> + happyIn146 + (happy_var_1 + )} + +happyReduce_341 = happyMonadReduce 3# 138# happyReduction_341 +happyReduction_341 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut147 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> + ( liftM (amap (const (ann happy_var_1 <++> nIS happy_var_3 <** [happy_var_2,happy_var_3]))) $ mkRecConstrOrUpdate happy_var_1 [])}}} + ) (\r -> happyReturn (happyIn147 r)) + +happyReduce_342 = happyMonadReduce 4# 138# happyReduction_342 +happyReduction_342 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut147 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurly) -> + case happyOut183 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurly) -> + ( liftM (amap (const (ann happy_var_1 <++> nIS happy_var_4 <** (happy_var_2:reverse (snd happy_var_3) ++ [happy_var_4])))) + $ mkRecConstrOrUpdate happy_var_1 (reverse (fst happy_var_3)))}}}} + ) (\r -> happyReturn (happyIn147 r)) + +happyReduce_343 = happyReduce 4# 138# happyReduction_343 +happyReduction_343 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut191 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftCurlyBar) -> + case happyOut73 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightCurlyBar) -> + happyIn147 + (ExplTypeArg (ann happy_var_1 <++> nIS happy_var_4 <** [happy_var_2,happy_var_4]) happy_var_1 happy_var_3 + ) `HappyStk` happyRest}}}} + +happyReduce_344 = happySpecReduce_1 138# happyReduction_344 +happyReduction_344 happy_x_1 + = case happyOut148 happy_x_1 of { happy_var_1 -> + happyIn147 + (happy_var_1 + )} + +happyReduce_345 = happySpecReduce_1 139# happyReduction_345 +happyReduction_345 happy_x_1 + = case happyOut192 happy_x_1 of { happy_var_1 -> + happyIn148 + (IPVar (ann happy_var_1) happy_var_1 + )} + +happyReduce_346 = happySpecReduce_1 139# happyReduction_346 +happyReduction_346 happy_x_1 + = case happyOut191 happy_x_1 of { happy_var_1 -> + happyIn148 + (Var (ann happy_var_1) happy_var_1 + )} + +happyReduce_347 = happySpecReduce_1 139# happyReduction_347 +happyReduction_347 happy_x_1 + = case happyOut188 happy_x_1 of { happy_var_1 -> + happyIn148 + (happy_var_1 + )} + +happyReduce_348 = happySpecReduce_1 139# happyReduction_348 +happyReduction_348 happy_x_1 + = case happyOut217 happy_x_1 of { happy_var_1 -> + happyIn148 + (Lit (ann happy_var_1) happy_var_1 + )} + +happyReduce_349 = happySpecReduce_3 139# happyReduction_349 +happyReduction_349 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut150 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn148 + (Paren (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 + )}}} + +happyReduce_350 = happySpecReduce_3 139# happyReduction_350 +happyReduction_350 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut150 happy_x_2 of { happy_var_2 -> + case happyOut151 happy_x_3 of { happy_var_3 -> + happyIn148 + (TupleSection (happy_var_1 <^^> head (snd happy_var_3) <** happy_var_1:reverse (snd happy_var_3)) (Just happy_var_2 : fst happy_var_3) + )}}} + +happyReduce_351 = happyReduce 4# 139# happyReduction_351 +happyReduction_351 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut149 happy_x_2 of { happy_var_2 -> + case happyOut150 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 RightParen) -> + happyIn148 + (TupleSection (happy_var_1 <^^> happy_var_4 <** happy_var_1:reverse (happy_var_4:happy_var_2)) + (replicate (length happy_var_2 - 1) Nothing ++ [Just happy_var_3]) + ) `HappyStk` happyRest}}}} + +happyReduce_352 = happyReduce 4# 139# happyReduction_352 +happyReduction_352 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut149 happy_x_2 of { happy_var_2 -> + case happyOut150 happy_x_3 of { happy_var_3 -> + case happyOut151 happy_x_4 of { happy_var_4 -> + happyIn148 + (TupleSection (happy_var_1 <^^> head (snd happy_var_4) <** happy_var_1:reverse (snd happy_var_4 ++ happy_var_2)) + (replicate (length happy_var_2 - 1) Nothing ++ Just happy_var_3 : fst happy_var_4) + ) `HappyStk` happyRest}}}} + +happyReduce_353 = happySpecReduce_3 139# happyReduction_353 +happyReduction_353 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> + case happyOut163 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightSquare) -> + happyIn148 + (amap (<** [happy_var_1,happy_var_3]) $ happy_var_2 (happy_var_1 <^^> happy_var_3) + )}}} + +happyReduce_354 = happySpecReduce_1 139# happyReduction_354 +happyReduction_354 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Underscore) -> + happyIn148 + (WildCard (nIS happy_var_1) + )} + +happyReduce_355 = happyMonadReduce 3# 139# happyReduction_355 +happyReduction_355 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut153 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + ( checkEnabled RegularPatterns >> return (Paren (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2))}}} + ) (\r -> happyReturn (happyIn148 r)) + +happyReduce_356 = happySpecReduce_3 139# happyReduction_356 +happyReduction_356 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 RPGuardOpen) -> + case happyOut152 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RPGuardClose) -> + happyIn148 + (SeqRP (happy_var_1 <^^> happy_var_3 <** (happy_var_1:reverse (snd happy_var_2) ++ [happy_var_3])) $ reverse (fst happy_var_2) + )}}} + +happyReduce_357 = happyReduce 5# 139# happyReduction_357 +happyReduction_357 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 RPGuardOpen) -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 Bar) -> + case happyOut169 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 RPGuardClose) -> + happyIn148 + (GuardRP (happy_var_1 <^^> happy_var_5 <** (happy_var_1:happy_var_3 : snd happy_var_4 ++ [happy_var_5])) happy_var_2 $ (reverse $ fst happy_var_4) + ) `HappyStk` happyRest}}}}} + +happyReduce_358 = happySpecReduce_1 139# happyReduction_358 +happyReduction_358 happy_x_1 + = case happyOut154 happy_x_1 of { happy_var_1 -> + happyIn148 + (happy_var_1 + )} + +happyReduce_359 = happySpecReduce_1 139# happyReduction_359 +happyReduction_359 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn148 + (let Loc l (THIdEscape s) = happy_var_1 in SpliceExp (nIS l) $ IdSplice (nIS l) s + )} + +happyReduce_360 = happySpecReduce_3 139# happyReduction_360 +happyReduction_360 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THParenEscape) -> + case happyOut135 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn148 + (SpliceExp (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) $ ParenSplice (ann happy_var_2) happy_var_2 + )}}} + +happyReduce_361 = happySpecReduce_3 139# happyReduction_361 +happyReduction_361 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THExpQuote) -> + case happyOut135 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 THCloseQuote) -> + happyIn148 + (BracketExp (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) $ ExpBracket (ann happy_var_2) happy_var_2 + )}}} + +happyReduce_362 = happyMonadReduce 3# 139# happyReduction_362 +happyReduction_362 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 THPatQuote) -> + case happyOut137 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 THCloseQuote) -> + ( do { p <- checkPattern happy_var_2; + return $ BracketExp (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) $ PatBracket (ann p) p })}}} + ) (\r -> happyReturn (happyIn148 r)) + +happyReduce_363 = happySpecReduce_3 139# happyReduction_363 +happyReduction_363 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THTypQuote) -> + case happyOut82 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 THCloseQuote) -> + happyIn148 + (let l = happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3] in BracketExp l $ TypeBracket l happy_var_2 + )}}} + +happyReduce_364 = happyReduce 5# 139# happyReduction_364 +happyReduction_364 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THDecQuote) -> + case happyOut44 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 THCloseQuote) -> + happyIn148 + (let l = happy_var_1 <^^> happy_var_5 <** (happy_var_1:snd happy_var_3 ++ [happy_var_5]) in BracketExp l $ DeclBracket l (fst happy_var_3) + ) `HappyStk` happyRest}}} + +happyReduce_365 = happySpecReduce_2 139# happyReduction_365 +happyReduction_365 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THVarQuote) -> + case happyOut191 happy_x_2 of { happy_var_2 -> + happyIn148 + (VarQuote (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_366 = happySpecReduce_2 139# happyReduction_366 +happyReduction_366 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THVarQuote) -> + case happyOut194 happy_x_2 of { happy_var_2 -> + happyIn148 + (VarQuote (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_367 = happySpecReduce_2 139# happyReduction_367 +happyReduction_367 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THTyQuote) -> + case happyOut223 happy_x_2 of { happy_var_2 -> + happyIn148 + (TypQuote (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) (UnQual (ann happy_var_2) happy_var_2) + )}} + +happyReduce_368 = happySpecReduce_2 139# happyReduction_368 +happyReduction_368 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 THTyQuote) -> + case happyOut79 happy_x_2 of { happy_var_2 -> + happyIn148 + (TypQuote (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_369 = happySpecReduce_1 139# happyReduction_369 +happyReduction_369 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn148 + (let Loc l (THQuasiQuote (n,q)) = happy_var_1 in QuasiQuote (nIS l) n q + )} + +happyReduce_370 = happySpecReduce_2 140# happyReduction_370 +happyReduction_370 happy_x_2 + happy_x_1 + = case happyOut149 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + happyIn149 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_371 = happySpecReduce_1 140# happyReduction_371 +happyReduction_371 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Comma) -> + happyIn149 + ([happy_var_1] + )} + +happyReduce_372 = happySpecReduce_1 141# happyReduction_372 +happyReduction_372 happy_x_1 + = case happyOut136 happy_x_1 of { happy_var_1 -> + happyIn150 + (happy_var_1 + )} + +happyReduce_373 = happySpecReduce_2 141# happyReduction_373 +happyReduction_373 happy_x_2 + happy_x_1 + = case happyOut202 happy_x_1 of { happy_var_1 -> + case happyOut137 happy_x_2 of { happy_var_2 -> + happyIn150 + (PreOp (happy_var_1 <> happy_var_2) happy_var_1 happy_var_2 + )}} + +happyReduce_374 = happyMonadReduce 3# 141# happyReduction_374 +happyReduction_374 (happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut136 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightArrow) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + ( do {checkEnabled ViewPatterns; + return $ ViewPat (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3})}}} + ) (\r -> happyReturn (happyIn150 r)) + +happyReduce_375 = happySpecReduce_3 142# happyReduction_375 +happyReduction_375 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut149 happy_x_1 of { happy_var_1 -> + case happyOut150 happy_x_2 of { happy_var_2 -> + case happyOut151 happy_x_3 of { happy_var_3 -> + happyIn151 + (let (mes, ss) = happy_var_3 in (replicate (length happy_var_1 - 1) Nothing ++ Just happy_var_2 : mes, ss ++ happy_var_1) + )}}} + +happyReduce_376 = happySpecReduce_3 142# happyReduction_376 +happyReduction_376 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut149 happy_x_1 of { happy_var_1 -> + case happyOut150 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn151 + ((replicate (length happy_var_1 - 1) Nothing ++ [Just happy_var_2], happy_var_3 : happy_var_1) + )}}} + +happyReduce_377 = happySpecReduce_2 142# happyReduction_377 +happyReduction_377 happy_x_2 + happy_x_1 + = case happyOut149 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightParen) -> + happyIn151 + ((replicate (length happy_var_1) Nothing, happy_var_2 : happy_var_1) + )}} + +happyReduce_378 = happySpecReduce_3 143# happyReduction_378 +happyReduction_378 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut152 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn152 + ((happy_var_3 : fst happy_var_1, happy_var_2 : snd happy_var_1) + )}}} + +happyReduce_379 = happySpecReduce_1 143# happyReduction_379 +happyReduction_379 happy_x_1 + = case happyOut136 happy_x_1 of { happy_var_1 -> + happyIn152 + (([happy_var_1],[]) + )} + +happyReduce_380 = happySpecReduce_3 144# happyReduction_380 +happyReduction_380 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut136 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> + case happyOut153 happy_x_3 of { happy_var_3 -> + happyIn153 + (EitherRP (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_381 = happySpecReduce_3 144# happyReduction_381 +happyReduction_381 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut136 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn153 + (EitherRP (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_382 = happyMonadReduce 9# 145# happyReduction_382 +happyReduction_382 (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 happyOutTok happy_x_1 of { (Loc happy_var_1 XStdTagOpen) -> + case happyOut157 happy_x_2 of { happy_var_2 -> + case happyOut160 happy_x_3 of { happy_var_3 -> + case happyOut162 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 XStdTagClose) -> + case happyOut155 happy_x_6 of { happy_var_6 -> + case happyOutTok happy_x_7 of { (Loc happy_var_7 XCloseTagOpen) -> + case happyOut157 happy_x_8 of { happy_var_8 -> + case happyOutTok happy_x_9 of { (Loc happy_var_9 XStdTagClose) -> + ( do { n <- checkEqNames happy_var_2 happy_var_8; + let { cn = reverse happy_var_6; + as = reverse happy_var_3; + l = happy_var_1 <^^> happy_var_9 <** [happy_var_1,happy_var_5,happy_var_7,happy_var_9] }; + return $ XTag l n as happy_var_4 cn })}}}}}}}}} + ) (\r -> happyReturn (happyIn154 r)) + +happyReduce_383 = happyReduce 5# 145# happyReduction_383 +happyReduction_383 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 XStdTagOpen) -> + case happyOut157 happy_x_2 of { happy_var_2 -> + case happyOut160 happy_x_3 of { happy_var_3 -> + case happyOut162 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 XEmptyTagClose) -> + happyIn154 + (XETag (happy_var_1 <^^> happy_var_5 <** [happy_var_1,happy_var_5]) happy_var_2 (reverse happy_var_3) happy_var_4 + ) `HappyStk` happyRest}}}}} + +happyReduce_384 = happySpecReduce_3 145# happyReduction_384 +happyReduction_384 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 XCodeTagOpen) -> + case happyOut136 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 XCodeTagClose) -> + happyIn154 + (XExpTag (happy_var_1 <^^> happy_var_3 <** [happy_var_1,happy_var_3]) happy_var_2 + )}}} + +happyReduce_385 = happySpecReduce_2 146# happyReduction_385 +happyReduction_385 happy_x_2 + happy_x_1 + = case happyOut155 happy_x_1 of { happy_var_1 -> + case happyOut156 happy_x_2 of { happy_var_2 -> + happyIn155 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_386 = happySpecReduce_0 146# happyReduction_386 +happyReduction_386 = happyIn155 + ([] + ) + +happyReduce_387 = happySpecReduce_1 147# happyReduction_387 +happyReduction_387 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn156 + (let Loc l (XPCDATA pcd) = happy_var_1 in XPcdata (nIS l) pcd + )} + +happyReduce_388 = happySpecReduce_3 147# happyReduction_388 +happyReduction_388 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 XRPatOpen) -> + case happyOut152 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 XRPatClose) -> + happyIn156 + (XRPats (happy_var_1 <^^> happy_var_3 <** (snd happy_var_2 ++ [happy_var_1,happy_var_3])) $ reverse (fst happy_var_2) + )}}} + +happyReduce_389 = happySpecReduce_1 147# happyReduction_389 +happyReduction_389 happy_x_1 + = case happyOut154 happy_x_1 of { happy_var_1 -> + happyIn156 + (happy_var_1 + )} + +happyReduce_390 = happySpecReduce_3 148# happyReduction_390 +happyReduction_390 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut158 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Colon) -> + case happyOut158 happy_x_3 of { happy_var_3 -> + happyIn157 + (let {Loc l1 s1 = happy_var_1; Loc l2 s2 = happy_var_3} + in XDomName (nIS l1 <++> nIS l2 <** [happy_var_2]) s1 s2 + )}}} + +happyReduce_391 = happySpecReduce_1 148# happyReduction_391 +happyReduction_391 happy_x_1 + = case happyOut158 happy_x_1 of { happy_var_1 -> + happyIn157 + (let Loc l str = happy_var_1 in XName (nIS l) str + )} + +happyReduce_392 = happySpecReduce_1 149# happyReduction_392 +happyReduction_392 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn158 + (let Loc l (VarId s) = happy_var_1 in Loc l s + )} + +happyReduce_393 = happySpecReduce_1 149# happyReduction_393 +happyReduction_393 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn158 + (let Loc l (ConId s) = happy_var_1 in Loc l s + )} + +happyReduce_394 = happySpecReduce_1 149# happyReduction_394 +happyReduction_394 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn158 + (let Loc l (DVarId s) = happy_var_1 in Loc l $ mkDVar s + )} + +happyReduce_395 = happySpecReduce_1 149# happyReduction_395 +happyReduction_395 happy_x_1 + = case happyOut159 happy_x_1 of { happy_var_1 -> + happyIn158 + (happy_var_1 + )} + +happyReduce_396 = happySpecReduce_1 150# happyReduction_396 +happyReduction_396 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Type) -> + happyIn159 + (Loc happy_var_1 "type" + )} + +happyReduce_397 = happySpecReduce_1 150# happyReduction_397 +happyReduction_397 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Class) -> + happyIn159 + (Loc happy_var_1 "class" + )} + +happyReduce_398 = happySpecReduce_1 150# happyReduction_398 +happyReduction_398 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Data) -> + happyIn159 + (Loc happy_var_1 "data" + )} + +happyReduce_399 = happySpecReduce_1 150# happyReduction_399 +happyReduction_399 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Foreign) -> + happyIn159 + (Loc happy_var_1 "foreign" + )} + +happyReduce_400 = happySpecReduce_1 150# happyReduction_400 +happyReduction_400 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Export) -> + happyIn159 + (Loc happy_var_1 "export" + )} + +happyReduce_401 = happySpecReduce_1 150# happyReduction_401 +happyReduction_401 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Safe) -> + happyIn159 + (Loc happy_var_1 "safe" + )} + +happyReduce_402 = happySpecReduce_1 150# happyReduction_402 +happyReduction_402 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Unsafe) -> + happyIn159 + (Loc happy_var_1 "unsafe" + )} + +happyReduce_403 = happySpecReduce_1 150# happyReduction_403 +happyReduction_403 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Threadsafe) -> + happyIn159 + (Loc happy_var_1 "threadsafe" + )} + +happyReduce_404 = happySpecReduce_1 150# happyReduction_404 +happyReduction_404 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_StdCall) -> + happyIn159 + (Loc happy_var_1 "stdcall" + )} + +happyReduce_405 = happySpecReduce_1 150# happyReduction_405 +happyReduction_405 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_CCall) -> + happyIn159 + (Loc happy_var_1 "ccall" + )} + +happyReduce_406 = happySpecReduce_1 150# happyReduction_406 +happyReduction_406 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_As) -> + happyIn159 + (Loc happy_var_1 "as" + )} + +happyReduce_407 = happySpecReduce_1 150# happyReduction_407 +happyReduction_407 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_By) -> + happyIn159 + (Loc happy_var_1 "by" + )} + +happyReduce_408 = happySpecReduce_1 150# happyReduction_408 +happyReduction_408 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Case) -> + happyIn159 + (Loc happy_var_1 "case" + )} + +happyReduce_409 = happySpecReduce_1 150# happyReduction_409 +happyReduction_409 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Default) -> + happyIn159 + (Loc happy_var_1 "default" + )} + +happyReduce_410 = happySpecReduce_1 150# happyReduction_410 +happyReduction_410 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Deriving) -> + happyIn159 + (Loc happy_var_1 "deriving" + )} + +happyReduce_411 = happySpecReduce_1 150# happyReduction_411 +happyReduction_411 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Do) -> + happyIn159 + (Loc happy_var_1 "do" + )} + +happyReduce_412 = happySpecReduce_1 150# happyReduction_412 +happyReduction_412 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Else) -> + happyIn159 + (Loc happy_var_1 "else" + )} + +happyReduce_413 = happySpecReduce_1 150# happyReduction_413 +happyReduction_413 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Family) -> + happyIn159 + (Loc happy_var_1 "family" + )} + +happyReduce_414 = happySpecReduce_1 150# happyReduction_414 +happyReduction_414 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Forall) -> + happyIn159 + (Loc happy_var_1 "forall" + )} + +happyReduce_415 = happySpecReduce_1 150# happyReduction_415 +happyReduction_415 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Group) -> + happyIn159 + (Loc happy_var_1 "group" + )} + +happyReduce_416 = happySpecReduce_1 150# happyReduction_416 +happyReduction_416 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Hiding) -> + happyIn159 + (Loc happy_var_1 "hiding" + )} + +happyReduce_417 = happySpecReduce_1 150# happyReduction_417 +happyReduction_417 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_If) -> + happyIn159 + (Loc happy_var_1 "if" + )} + +happyReduce_418 = happySpecReduce_1 150# happyReduction_418 +happyReduction_418 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Import) -> + happyIn159 + (Loc happy_var_1 "import" + )} + +happyReduce_419 = happySpecReduce_1 150# happyReduction_419 +happyReduction_419 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_In) -> + happyIn159 + (Loc happy_var_1 "in" + )} + +happyReduce_420 = happySpecReduce_1 150# happyReduction_420 +happyReduction_420 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Infix) -> + happyIn159 + (Loc happy_var_1 "infix" + )} + +happyReduce_421 = happySpecReduce_1 150# happyReduction_421 +happyReduction_421 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_InfixL) -> + happyIn159 + (Loc happy_var_1 "infixl" + )} + +happyReduce_422 = happySpecReduce_1 150# happyReduction_422 +happyReduction_422 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_InfixR) -> + happyIn159 + (Loc happy_var_1 "infixr" + )} + +happyReduce_423 = happySpecReduce_1 150# happyReduction_423 +happyReduction_423 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Instance) -> + happyIn159 + (Loc happy_var_1 "instance" + )} + +happyReduce_424 = happySpecReduce_1 150# happyReduction_424 +happyReduction_424 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Let) -> + happyIn159 + (Loc happy_var_1 "let" + )} + +happyReduce_425 = happySpecReduce_1 150# happyReduction_425 +happyReduction_425 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_MDo) -> + happyIn159 + (Loc happy_var_1 "mdo" + )} + +happyReduce_426 = happySpecReduce_1 150# happyReduction_426 +happyReduction_426 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Module) -> + happyIn159 + (Loc happy_var_1 "module" + )} + +happyReduce_427 = happySpecReduce_1 150# happyReduction_427 +happyReduction_427 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_NewType) -> + happyIn159 + (Loc happy_var_1 "newtype" + )} + +happyReduce_428 = happySpecReduce_1 150# happyReduction_428 +happyReduction_428 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Of) -> + happyIn159 + (Loc happy_var_1 "of" + )} + +happyReduce_429 = happySpecReduce_1 150# happyReduction_429 +happyReduction_429 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Proc) -> + happyIn159 + (Loc happy_var_1 "proc" + )} + +happyReduce_430 = happySpecReduce_1 150# happyReduction_430 +happyReduction_430 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Rec) -> + happyIn159 + (Loc happy_var_1 "rec" + )} + +happyReduce_431 = happySpecReduce_1 150# happyReduction_431 +happyReduction_431 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> + happyIn159 + (Loc happy_var_1 "then" + )} + +happyReduce_432 = happySpecReduce_1 150# happyReduction_432 +happyReduction_432 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Using) -> + happyIn159 + (Loc happy_var_1 "using" + )} + +happyReduce_433 = happySpecReduce_1 150# happyReduction_433 +happyReduction_433 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Where) -> + happyIn159 + (Loc happy_var_1 "where" + )} + +happyReduce_434 = happySpecReduce_1 150# happyReduction_434 +happyReduction_434 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Qualified) -> + happyIn159 + (Loc happy_var_1 "qualified" + )} + +happyReduce_435 = happySpecReduce_2 151# happyReduction_435 +happyReduction_435 happy_x_2 + happy_x_1 + = case happyOut160 happy_x_1 of { happy_var_1 -> + case happyOut161 happy_x_2 of { happy_var_2 -> + happyIn160 + (happy_var_2 : happy_var_1 + )}} + +happyReduce_436 = happySpecReduce_0 151# happyReduction_436 +happyReduction_436 = happyIn160 + ([] + ) + +happyReduce_437 = happySpecReduce_3 152# happyReduction_437 +happyReduction_437 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut157 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Equals) -> + case happyOut146 happy_x_3 of { happy_var_3 -> + happyIn161 + (XAttr (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_438 = happySpecReduce_1 153# happyReduction_438 +happyReduction_438 happy_x_1 + = case happyOut146 happy_x_1 of { happy_var_1 -> + happyIn162 + (Just happy_var_1 + )} + +happyReduce_439 = happySpecReduce_0 153# happyReduction_439 +happyReduction_439 = happyIn162 + (Nothing + ) + +happyReduce_440 = happySpecReduce_1 154# happyReduction_440 +happyReduction_440 happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + happyIn163 + (\l -> List l [happy_var_1] + )} + +happyReduce_441 = happySpecReduce_1 154# happyReduction_441 +happyReduction_441 happy_x_1 + = case happyOut164 happy_x_1 of { happy_var_1 -> + happyIn163 + (\l -> let (ps,ss) = happy_var_1 in List (l <** ss) ps + )} + +happyReduce_442 = happySpecReduce_2 154# happyReduction_442 +happyReduction_442 happy_x_2 + happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 DotDot) -> + happyIn163 + (\l -> EnumFrom (l <** [happy_var_2]) happy_var_1 + )}} + +happyReduce_443 = happyReduce 4# 154# happyReduction_443 +happyReduction_443 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 DotDot) -> + happyIn163 + (\l -> EnumFromThen (l <** [happy_var_2,happy_var_4]) happy_var_1 happy_var_3 + ) `HappyStk` happyRest}}}} + +happyReduce_444 = happySpecReduce_3 154# happyReduction_444 +happyReduction_444 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 DotDot) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn163 + (\l -> EnumFromTo (l <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_445 = happyReduce 5# 154# happyReduction_445 +happyReduction_445 (happy_x_5 `HappyStk` + happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + case happyOutTok happy_x_4 of { (Loc happy_var_4 DotDot) -> + case happyOut136 happy_x_5 of { happy_var_5 -> + happyIn163 + (\l -> EnumFromThenTo (l <** [happy_var_2,happy_var_4]) happy_var_1 happy_var_3 happy_var_5 + ) `HappyStk` happyRest}}}}} + +happyReduce_446 = happySpecReduce_3 154# happyReduction_446 +happyReduction_446 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> + case happyOut165 happy_x_3 of { happy_var_3 -> + happyIn163 + (\l -> let (stss, ss) = happy_var_3 in ParComp (l <** (happy_var_2:ss)) happy_var_1 (reverse stss) + )}}} + +happyReduce_447 = happySpecReduce_3 155# happyReduction_447 +happyReduction_447 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut164 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut150 happy_x_3 of { happy_var_3 -> + happyIn164 + (let (es, ss) = happy_var_1 in (happy_var_3 : es, happy_var_2 : ss) + )}}} + +happyReduce_448 = happySpecReduce_3 155# happyReduction_448 +happyReduction_448 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut150 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut150 happy_x_3 of { happy_var_3 -> + happyIn164 + (([happy_var_3,happy_var_1], [happy_var_2]) + )}}} + +happyReduce_449 = happySpecReduce_3 156# happyReduction_449 +happyReduction_449 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut165 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Bar) -> + case happyOut166 happy_x_3 of { happy_var_3 -> + happyIn165 + (let { (stss, ss1) = happy_var_1; + (sts, ss2) = happy_var_3 } + in (reverse sts : stss, ss1 ++ [happy_var_2] ++ reverse ss2) + )}}} + +happyReduce_450 = happySpecReduce_1 156# happyReduction_450 +happyReduction_450 happy_x_1 + = case happyOut166 happy_x_1 of { happy_var_1 -> + happyIn165 + (let (sts, ss) = happy_var_1 in ([reverse sts], reverse ss) + )} + +happyReduce_451 = happySpecReduce_3 157# happyReduction_451 +happyReduction_451 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut166 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut167 happy_x_3 of { happy_var_3 -> + happyIn166 + (let (sts, ss) = happy_var_1 in (happy_var_3 : sts, happy_var_2 : ss) + )}}} + +happyReduce_452 = happySpecReduce_1 157# happyReduction_452 +happyReduction_452 happy_x_1 + = case happyOut167 happy_x_1 of { happy_var_1 -> + happyIn166 + (([happy_var_1],[]) + )} + +happyReduce_453 = happySpecReduce_1 158# happyReduction_453 +happyReduction_453 happy_x_1 + = case happyOut168 happy_x_1 of { happy_var_1 -> + happyIn167 + (happy_var_1 + )} + +happyReduce_454 = happySpecReduce_1 158# happyReduction_454 +happyReduction_454 happy_x_1 + = case happyOut170 happy_x_1 of { happy_var_1 -> + happyIn167 + (QualStmt (ann happy_var_1) happy_var_1 + )} + +happyReduce_455 = happySpecReduce_2 159# happyReduction_455 +happyReduction_455 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> + case happyOut135 happy_x_2 of { happy_var_2 -> + happyIn168 + (ThenTrans (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_456 = happyReduce 4# 159# happyReduction_456 +happyReduction_456 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> + case happyOut135 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_By) -> + case happyOut135 happy_x_4 of { happy_var_4 -> + happyIn168 + (ThenBy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_3]) happy_var_2 happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_457 = happyReduce 4# 159# happyReduction_457 +happyReduction_457 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Group) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_By) -> + case happyOut135 happy_x_4 of { happy_var_4 -> + happyIn168 + (GroupBy (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_458 = happyReduce 4# 159# happyReduction_458 +happyReduction_458 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Group) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_Using) -> + case happyOut135 happy_x_4 of { happy_var_4 -> + happyIn168 + (GroupUsing (nIS happy_var_1 <++> ann happy_var_4 <** [happy_var_1,happy_var_2,happy_var_3]) happy_var_4 + ) `HappyStk` happyRest}}}} + +happyReduce_459 = happyReduce 6# 159# happyReduction_459 +happyReduction_459 (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 happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Then) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 KW_Group) -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 KW_By) -> + case happyOut135 happy_x_4 of { happy_var_4 -> + case happyOutTok happy_x_5 of { (Loc happy_var_5 KW_Using) -> + case happyOut135 happy_x_6 of { happy_var_6 -> + happyIn168 + (GroupByUsing (nIS happy_var_1 <++> ann happy_var_6 <** [happy_var_1,happy_var_2,happy_var_3,happy_var_5]) happy_var_4 happy_var_6 + ) `HappyStk` happyRest}}}}}} + +happyReduce_460 = happySpecReduce_3 160# happyReduction_460 +happyReduction_460 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut169 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut170 happy_x_3 of { happy_var_3 -> + happyIn169 + (let (sts, ss) = happy_var_1 in (happy_var_3 : sts, happy_var_2 : ss) + )}}} + +happyReduce_461 = happySpecReduce_1 160# happyReduction_461 +happyReduction_461 happy_x_1 + = case happyOut170 happy_x_1 of { happy_var_1 -> + happyIn169 + (([happy_var_1],[]) + )} + +happyReduce_462 = happySpecReduce_3 161# happyReduction_462 +happyReduction_462 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut178 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftArrow) -> + case happyOut135 happy_x_3 of { happy_var_3 -> + happyIn170 + (Generator (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_463 = happySpecReduce_1 161# happyReduction_463 +happyReduction_463 happy_x_1 + = case happyOut135 happy_x_1 of { happy_var_1 -> + happyIn170 + (Qualifier (ann happy_var_1) happy_var_1 + )} + +happyReduce_464 = happySpecReduce_2 161# happyReduction_464 +happyReduction_464 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Let) -> + case happyOut56 happy_x_2 of { happy_var_2 -> + happyIn170 + (LetStmt (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_465 = happySpecReduce_3 162# happyReduction_465 +happyReduction_465 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> + case happyOut172 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> + happyIn171 + ((fst happy_var_2, happy_var_1 <^^> happy_var_3, happy_var_1:snd happy_var_2 ++ [happy_var_3], True) + )}}} + +happyReduce_466 = happySpecReduce_3 162# happyReduction_466 +happyReduction_466 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut218 happy_x_1 of { happy_var_1 -> + case happyOut172 happy_x_2 of { happy_var_2 -> + case happyOut219 happy_x_3 of { happy_var_3 -> + happyIn171 + ((fst happy_var_2, happy_var_1 <^^> happy_var_3, happy_var_1:snd happy_var_2 ++ [happy_var_3], False) + )}}} + +happyReduce_467 = happySpecReduce_3 163# happyReduction_467 +happyReduction_467 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut173 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn172 + ((reverse $ fst happy_var_2, happy_var_1 ++ snd happy_var_2 ++ happy_var_3) + )}}} + +happyReduce_468 = happySpecReduce_3 164# happyReduction_468 +happyReduction_468 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut173 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOut174 happy_x_3 of { happy_var_3 -> + happyIn173 + ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ happy_var_2) + )}}} + +happyReduce_469 = happySpecReduce_1 164# happyReduction_469 +happyReduction_469 happy_x_1 + = case happyOut174 happy_x_1 of { happy_var_1 -> + happyIn173 + (([happy_var_1],[]) + )} + +happyReduce_470 = happySpecReduce_3 165# happyReduction_470 +happyReduction_470 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut178 happy_x_1 of { happy_var_1 -> + case happyOut175 happy_x_2 of { happy_var_2 -> + case happyOut130 happy_x_3 of { happy_var_3 -> + happyIn174 + (Alt (happy_var_1 <> happy_var_2 <+?> (fmap ann) (fst happy_var_3) <** snd happy_var_3) happy_var_1 happy_var_2 (fst happy_var_3) + )}}} + +happyReduce_471 = happySpecReduce_2 166# happyReduction_471 +happyReduction_471 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 RightArrow) -> + case happyOut135 happy_x_2 of { happy_var_2 -> + happyIn175 + (UnGuardedAlt (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_472 = happySpecReduce_1 166# happyReduction_472 +happyReduction_472 happy_x_1 + = case happyOut176 happy_x_1 of { happy_var_1 -> + happyIn175 + (GuardedAlts (snd happy_var_1) (reverse $ fst happy_var_1) + )} + +happyReduce_473 = happySpecReduce_2 167# happyReduction_473 +happyReduction_473 happy_x_2 + happy_x_1 + = case happyOut176 happy_x_1 of { happy_var_1 -> + case happyOut177 happy_x_2 of { happy_var_2 -> + happyIn176 + ((happy_var_2 : fst happy_var_1, snd happy_var_1 <++> ann happy_var_2) + )}} + +happyReduce_474 = happySpecReduce_1 167# happyReduction_474 +happyReduction_474 happy_x_1 + = case happyOut177 happy_x_1 of { happy_var_1 -> + happyIn176 + (([happy_var_1], ann happy_var_1) + )} + +happyReduce_475 = happyMonadReduce 4# 168# happyReduction_475 +happyReduction_475 (happy_x_4 `HappyStk` + happy_x_3 `HappyStk` + happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Bar) -> + case happyOut169 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightArrow) -> + case happyOut135 happy_x_4 of { happy_var_4 -> + ( do { checkPatternGuards (fst happy_var_2); + let {l = nIS happy_var_1 <++> ann happy_var_4 <** (happy_var_1:snd happy_var_2 ++ [happy_var_3])}; + return (GuardedAlt l (reverse (fst happy_var_2)) happy_var_4) })}}}} + ) (\r -> happyReturn (happyIn177 r)) + +happyReduce_476 = happyMonadReduce 1# 169# happyReduction_476 +happyReduction_476 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut136 happy_x_1 of { happy_var_1 -> + ( checkPattern happy_var_1)} + ) (\r -> happyReturn (happyIn178 r)) + +happyReduce_477 = happyMonadReduce 2# 169# happyReduction_477 +happyReduction_477 (happy_x_2 `HappyStk` + happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + case happyOut146 happy_x_2 of { happy_var_2 -> + ( checkPattern (BangPat (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2))}} + ) (\r -> happyReturn (happyIn178 r)) + +happyReduce_478 = happySpecReduce_3 170# happyReduction_478 +happyReduction_478 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftCurly) -> + case happyOut180 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightCurly) -> + happyIn179 + ((fst happy_var_2, happy_var_1 <^^> happy_var_3, snd happy_var_2 ++ [happy_var_1,happy_var_3], True) + )}}} + +happyReduce_479 = happySpecReduce_3 170# happyReduction_479 +happyReduction_479 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut218 happy_x_1 of { happy_var_1 -> + case happyOut180 happy_x_2 of { happy_var_2 -> + case happyOut219 happy_x_3 of { happy_var_3 -> + happyIn179 + ((fst happy_var_2, happy_var_1 <^^> happy_var_3, snd happy_var_2 ++ [happy_var_1,happy_var_3], False) + )}}} + +happyReduce_480 = happySpecReduce_2 171# happyReduction_480 +happyReduction_480 happy_x_2 + happy_x_1 + = case happyOut182 happy_x_1 of { happy_var_1 -> + case happyOut181 happy_x_2 of { happy_var_2 -> + happyIn180 + ((happy_var_1 : fst happy_var_2, snd happy_var_2) + )}} + +happyReduce_481 = happySpecReduce_2 171# happyReduction_481 +happyReduction_481 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 SemiColon) -> + case happyOut180 happy_x_2 of { happy_var_2 -> + happyIn180 + ((fst happy_var_2, happy_var_1 : snd happy_var_2) + )}} + +happyReduce_482 = happySpecReduce_0 171# happyReduction_482 +happyReduction_482 = happyIn180 + (([],[]) + ) + +happyReduce_483 = happySpecReduce_2 172# happyReduction_483 +happyReduction_483 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 SemiColon) -> + case happyOut180 happy_x_2 of { happy_var_2 -> + happyIn181 + ((fst happy_var_2, happy_var_1 : snd happy_var_2) + )}} + +happyReduce_484 = happySpecReduce_0 172# happyReduction_484 +happyReduction_484 = happyIn181 + (([],[]) + ) + +happyReduce_485 = happySpecReduce_2 173# happyReduction_485 +happyReduction_485 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Let) -> + case happyOut56 happy_x_2 of { happy_var_2 -> + happyIn182 + (LetStmt (nIS happy_var_1 <++> ann happy_var_2 <** [happy_var_1]) happy_var_2 + )}} + +happyReduce_486 = happySpecReduce_3 173# happyReduction_486 +happyReduction_486 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut178 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 LeftArrow) -> + case happyOut135 happy_x_3 of { happy_var_3 -> + happyIn182 + (Generator (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_487 = happySpecReduce_1 173# happyReduction_487 +happyReduction_487 happy_x_1 + = case happyOut135 happy_x_1 of { happy_var_1 -> + happyIn182 + (Qualifier (ann happy_var_1) happy_var_1 + )} + +happyReduce_488 = happySpecReduce_2 173# happyReduction_488 +happyReduction_488 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Rec) -> + case happyOut179 happy_x_2 of { happy_var_2 -> + happyIn182 + (let (stms,inf,ss,b) = happy_var_2 in RecStmt (nIS happy_var_1 <++> inf <** happy_var_1:ss <?? b) stms + )}} + +happyReduce_489 = happySpecReduce_3 174# happyReduction_489 +happyReduction_489 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut183 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Comma) -> + case happyOut184 happy_x_3 of { happy_var_3 -> + happyIn183 + (let (fbs, ss) = happy_var_1 in (happy_var_3 : fbs, happy_var_2 : ss) + )}}} + +happyReduce_490 = happySpecReduce_1 174# happyReduction_490 +happyReduction_490 happy_x_1 + = case happyOut184 happy_x_1 of { happy_var_1 -> + happyIn183 + (([happy_var_1],[]) + )} + +happyReduce_491 = happySpecReduce_3 175# happyReduction_491 +happyReduction_491 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut191 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Equals) -> + case happyOut136 happy_x_3 of { happy_var_3 -> + happyIn184 + (FieldUpdate (happy_var_1 <>happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_492 = happyMonadReduce 1# 175# happyReduction_492 +happyReduction_492 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOut191 happy_x_1 of { happy_var_1 -> + ( checkEnabled NamedFieldPuns >> checkUnQual happy_var_1 >>= return . FieldPun (ann happy_var_1))} + ) (\r -> happyReturn (happyIn184 r)) + +happyReduce_493 = happyMonadReduce 1# 175# happyReduction_493 +happyReduction_493 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (case happyOutTok happy_x_1 of { (Loc happy_var_1 DotDot) -> + ( checkEnabled RecordWildCards >> return (FieldWildcard (nIS happy_var_1)))} + ) (\r -> happyReturn (happyIn184 r)) + +happyReduce_494 = happySpecReduce_3 176# happyReduction_494 +happyReduction_494 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut21 happy_x_1 of { happy_var_1 -> + case happyOut186 happy_x_2 of { happy_var_2 -> + case happyOut21 happy_x_3 of { happy_var_3 -> + happyIn185 + ((reverse (fst happy_var_2), reverse happy_var_1 ++ snd happy_var_2 ++ reverse happy_var_3) + )}}} + +happyReduce_495 = happySpecReduce_3 177# happyReduction_495 +happyReduction_495 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut186 happy_x_1 of { happy_var_1 -> + case happyOut20 happy_x_2 of { happy_var_2 -> + case happyOut187 happy_x_3 of { happy_var_3 -> + happyIn186 + ((happy_var_3 : fst happy_var_1, snd happy_var_1 ++ reverse happy_var_2) + )}}} + +happyReduce_496 = happySpecReduce_1 177# happyReduction_496 +happyReduction_496 happy_x_1 + = case happyOut187 happy_x_1 of { happy_var_1 -> + happyIn186 + (([happy_var_1],[]) + )} + +happyReduce_497 = happySpecReduce_3 178# happyReduction_497 +happyReduction_497 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOut192 happy_x_1 of { happy_var_1 -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 Equals) -> + case happyOut135 happy_x_3 of { happy_var_3 -> + happyIn187 + (IPBind (happy_var_1 <> happy_var_3 <** [happy_var_2]) happy_var_1 happy_var_3 + )}}} + +happyReduce_498 = happySpecReduce_2 179# happyReduction_498 +happyReduction_498 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightParen) -> + happyIn188 + (p_unit_con (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) + )}} + +happyReduce_499 = happySpecReduce_2 179# happyReduction_499 +happyReduction_499 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftSquare) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightSquare) -> + happyIn188 + (List (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) [] + )}} + +happyReduce_500 = happySpecReduce_3 179# happyReduction_500 +happyReduction_500 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut149 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn188 + (p_tuple_con (happy_var_1 <^^> happy_var_3 <** happy_var_1:reverse (happy_var_3:happy_var_2)) Boxed (length happy_var_2) + )}}} + +happyReduce_501 = happySpecReduce_2 179# happyReduction_501 +happyReduction_501 happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> + case happyOutTok happy_x_2 of { (Loc happy_var_2 RightHashParen) -> + happyIn188 + (p_unboxed_singleton_con (happy_var_1 <^^> happy_var_2 <** [happy_var_1,happy_var_2]) + )}} + +happyReduce_502 = happySpecReduce_3 179# happyReduction_502 +happyReduction_502 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftHashParen) -> + case happyOut149 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightHashParen) -> + happyIn188 + (p_tuple_con (happy_var_1 <^^> happy_var_3 <** happy_var_1:reverse (happy_var_3:happy_var_2)) Unboxed (length happy_var_2) + )}}} + +happyReduce_503 = happySpecReduce_1 179# happyReduction_503 +happyReduction_503 happy_x_1 + = case happyOut194 happy_x_1 of { happy_var_1 -> + happyIn188 + (Con (ann happy_var_1) happy_var_1 + )} + +happyReduce_504 = happySpecReduce_1 180# happyReduction_504 +happyReduction_504 happy_x_1 + = case happyOut206 happy_x_1 of { happy_var_1 -> + happyIn189 + (happy_var_1 + )} + +happyReduce_505 = happySpecReduce_3 180# happyReduction_505 +happyReduction_505 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut214 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn189 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_506 = happySpecReduce_1 181# happyReduction_506 +happyReduction_506 happy_x_1 + = case happyOut205 happy_x_1 of { happy_var_1 -> + happyIn190 + (happy_var_1 + )} + +happyReduce_507 = happySpecReduce_3 181# happyReduction_507 +happyReduction_507 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut214 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn190 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_508 = happySpecReduce_1 182# happyReduction_508 +happyReduction_508 happy_x_1 + = case happyOut204 happy_x_1 of { happy_var_1 -> + happyIn191 + (happy_var_1 + )} + +happyReduce_509 = happySpecReduce_3 182# happyReduction_509 +happyReduction_509 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut212 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn191 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_510 = happySpecReduce_1 183# happyReduction_510 +happyReduction_510 happy_x_1 + = case happyOut207 happy_x_1 of { happy_var_1 -> + happyIn192 + (happy_var_1 + )} + +happyReduce_511 = happySpecReduce_1 184# happyReduction_511 +happyReduction_511 happy_x_1 + = case happyOut209 happy_x_1 of { happy_var_1 -> + happyIn193 + (happy_var_1 + )} + +happyReduce_512 = happySpecReduce_3 184# happyReduction_512 +happyReduction_512 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut211 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn193 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_513 = happySpecReduce_1 185# happyReduction_513 +happyReduction_513 happy_x_1 + = case happyOut208 happy_x_1 of { happy_var_1 -> + happyIn194 + (happy_var_1 + )} + +happyReduce_514 = happySpecReduce_3 185# happyReduction_514 +happyReduction_514 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 LeftParen) -> + case happyOut203 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 RightParen) -> + happyIn194 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_515 = happySpecReduce_1 186# happyReduction_515 +happyReduction_515 happy_x_1 + = case happyOut214 happy_x_1 of { happy_var_1 -> + happyIn195 + (happy_var_1 + )} + +happyReduce_516 = happySpecReduce_3 186# happyReduction_516 +happyReduction_516 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> + case happyOut206 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> + happyIn195 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_517 = happySpecReduce_1 187# happyReduction_517 +happyReduction_517 happy_x_1 + = case happyOut212 happy_x_1 of { happy_var_1 -> + happyIn196 + (happy_var_1 + )} + +happyReduce_518 = happySpecReduce_3 187# happyReduction_518 +happyReduction_518 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> + case happyOut204 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> + happyIn196 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_519 = happySpecReduce_1 188# happyReduction_519 +happyReduction_519 happy_x_1 + = case happyOut213 happy_x_1 of { happy_var_1 -> + happyIn197 + (happy_var_1 + )} + +happyReduce_520 = happySpecReduce_3 188# happyReduction_520 +happyReduction_520 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> + case happyOut204 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> + happyIn197 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_521 = happySpecReduce_1 189# happyReduction_521 +happyReduction_521 happy_x_1 + = case happyOut211 happy_x_1 of { happy_var_1 -> + happyIn198 + (happy_var_1 + )} + +happyReduce_522 = happySpecReduce_3 189# happyReduction_522 +happyReduction_522 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> + case happyOut209 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> + happyIn198 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_523 = happySpecReduce_1 190# happyReduction_523 +happyReduction_523 happy_x_1 + = case happyOut203 happy_x_1 of { happy_var_1 -> + happyIn199 + (happy_var_1 + )} + +happyReduce_524 = happySpecReduce_3 190# happyReduction_524 +happyReduction_524 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> + case happyOut208 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> + happyIn199 + (amap (const (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3])) happy_var_2 + )}}} + +happyReduce_525 = happySpecReduce_1 191# happyReduction_525 +happyReduction_525 happy_x_1 + = case happyOut195 happy_x_1 of { happy_var_1 -> + happyIn200 + (VarOp (ann happy_var_1) happy_var_1 + )} + +happyReduce_526 = happySpecReduce_1 191# happyReduction_526 +happyReduction_526 happy_x_1 + = case happyOut198 happy_x_1 of { happy_var_1 -> + happyIn200 + (ConOp (ann happy_var_1) happy_var_1 + )} + +happyReduce_527 = happySpecReduce_1 192# happyReduction_527 +happyReduction_527 happy_x_1 + = case happyOut196 happy_x_1 of { happy_var_1 -> + happyIn201 + (QVarOp (ann happy_var_1) happy_var_1 + )} + +happyReduce_528 = happySpecReduce_1 192# happyReduction_528 +happyReduction_528 happy_x_1 + = case happyOut199 happy_x_1 of { happy_var_1 -> + happyIn201 + (QConOp (ann happy_var_1) happy_var_1 + )} + +happyReduce_529 = happySpecReduce_1 193# happyReduction_529 +happyReduction_529 happy_x_1 + = case happyOut197 happy_x_1 of { happy_var_1 -> + happyIn202 + (QVarOp (ann happy_var_1) happy_var_1 + )} + +happyReduce_530 = happySpecReduce_1 193# happyReduction_530 +happyReduction_530 happy_x_1 + = case happyOut199 happy_x_1 of { happy_var_1 -> + happyIn202 + (QConOp (ann happy_var_1) happy_var_1 + )} + +happyReduce_531 = happySpecReduce_1 194# happyReduction_531 +happyReduction_531 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Colon) -> + happyIn203 + (list_cons_name (nIS happy_var_1) + )} + +happyReduce_532 = happySpecReduce_1 194# happyReduction_532 +happyReduction_532 happy_x_1 + = case happyOut210 happy_x_1 of { happy_var_1 -> + happyIn203 + (happy_var_1 + )} + +happyReduce_533 = happySpecReduce_1 195# happyReduction_533 +happyReduction_533 happy_x_1 + = case happyOut206 happy_x_1 of { happy_var_1 -> + happyIn204 + (UnQual (ann happy_var_1) happy_var_1 + )} + +happyReduce_534 = happySpecReduce_1 195# happyReduction_534 +happyReduction_534 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn204 + (let {Loc l (QVarId q) = happy_var_1; nis = nIS l} + in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) + )} + +happyReduce_535 = happySpecReduce_1 196# happyReduction_535 +happyReduction_535 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn205 + (let Loc l (VarId v) = happy_var_1 in Ident (nIS l) v + )} + +happyReduce_536 = happySpecReduce_1 196# happyReduction_536 +happyReduction_536 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_As) -> + happyIn205 + (as_name (nIS happy_var_1) + )} + +happyReduce_537 = happySpecReduce_1 196# happyReduction_537 +happyReduction_537 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Qualified) -> + happyIn205 + (qualified_name (nIS happy_var_1) + )} + +happyReduce_538 = happySpecReduce_1 196# happyReduction_538 +happyReduction_538 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Hiding) -> + happyIn205 + (hiding_name (nIS happy_var_1) + )} + +happyReduce_539 = happySpecReduce_1 196# happyReduction_539 +happyReduction_539 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Export) -> + happyIn205 + (export_name (nIS happy_var_1) + )} + +happyReduce_540 = happySpecReduce_1 196# happyReduction_540 +happyReduction_540 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_StdCall) -> + happyIn205 + (stdcall_name (nIS happy_var_1) + )} + +happyReduce_541 = happySpecReduce_1 196# happyReduction_541 +happyReduction_541 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_CCall) -> + happyIn205 + (ccall_name (nIS happy_var_1) + )} + +happyReduce_542 = happySpecReduce_1 197# happyReduction_542 +happyReduction_542 happy_x_1 + = case happyOut205 happy_x_1 of { happy_var_1 -> + happyIn206 + (happy_var_1 + )} + +happyReduce_543 = happySpecReduce_1 197# happyReduction_543 +happyReduction_543 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Safe) -> + happyIn206 + (safe_name (nIS happy_var_1) + )} + +happyReduce_544 = happySpecReduce_1 197# happyReduction_544 +happyReduction_544 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Unsafe) -> + happyIn206 + (unsafe_name (nIS happy_var_1) + )} + +happyReduce_545 = happySpecReduce_1 197# happyReduction_545 +happyReduction_545 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 KW_Threadsafe) -> + happyIn206 + (threadsafe_name (nIS happy_var_1) + )} + +happyReduce_546 = happySpecReduce_1 198# happyReduction_546 +happyReduction_546 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn207 + (let Loc l (IDupVarId i) = happy_var_1 in IPDup (nIS l) i + )} + +happyReduce_547 = happySpecReduce_1 198# happyReduction_547 +happyReduction_547 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn207 + (let Loc l (ILinVarId i) = happy_var_1 in IPLin (nIS l) i + )} + +happyReduce_548 = happySpecReduce_1 199# happyReduction_548 +happyReduction_548 happy_x_1 + = case happyOut209 happy_x_1 of { happy_var_1 -> + happyIn208 + (UnQual (ann happy_var_1) happy_var_1 + )} + +happyReduce_549 = happySpecReduce_1 199# happyReduction_549 +happyReduction_549 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn208 + (let {Loc l (QConId q) = happy_var_1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) + )} + +happyReduce_550 = happySpecReduce_1 200# happyReduction_550 +happyReduction_550 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn209 + (let Loc l (ConId c) = happy_var_1 in Ident (nIS l) c + )} + +happyReduce_551 = happySpecReduce_1 201# happyReduction_551 +happyReduction_551 happy_x_1 + = case happyOut211 happy_x_1 of { happy_var_1 -> + happyIn210 + (UnQual (ann happy_var_1) happy_var_1 + )} + +happyReduce_552 = happySpecReduce_1 201# happyReduction_552 +happyReduction_552 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn210 + (let {Loc l (QConSym q) = happy_var_1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) + )} + +happyReduce_553 = happySpecReduce_1 202# happyReduction_553 +happyReduction_553 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn211 + (let Loc l (ConSym c) = happy_var_1 in Symbol (nIS l) c + )} + +happyReduce_554 = happySpecReduce_1 203# happyReduction_554 +happyReduction_554 happy_x_1 + = case happyOut214 happy_x_1 of { happy_var_1 -> + happyIn212 + (UnQual (ann happy_var_1) happy_var_1 + )} + +happyReduce_555 = happySpecReduce_1 203# happyReduction_555 +happyReduction_555 happy_x_1 + = case happyOut216 happy_x_1 of { happy_var_1 -> + happyIn212 + (happy_var_1 + )} + +happyReduce_556 = happySpecReduce_1 204# happyReduction_556 +happyReduction_556 happy_x_1 + = case happyOut215 happy_x_1 of { happy_var_1 -> + happyIn213 + (UnQual (ann happy_var_1) happy_var_1 + )} + +happyReduce_557 = happySpecReduce_1 204# happyReduction_557 +happyReduction_557 happy_x_1 + = case happyOut216 happy_x_1 of { happy_var_1 -> + happyIn213 + (happy_var_1 + )} + +happyReduce_558 = happySpecReduce_1 205# happyReduction_558 +happyReduction_558 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn214 + (let Loc l (VarSym v) = happy_var_1 in Symbol (nIS l) v + )} + +happyReduce_559 = happySpecReduce_1 205# happyReduction_559 +happyReduction_559 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Minus) -> + happyIn214 + (minus_name (nIS happy_var_1) + )} + +happyReduce_560 = happySpecReduce_1 205# happyReduction_560 +happyReduction_560 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + happyIn214 + (bang_name (nIS happy_var_1) + )} + +happyReduce_561 = happySpecReduce_1 205# happyReduction_561 +happyReduction_561 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Dot) -> + happyIn214 + (dot_name (nIS happy_var_1) + )} + +happyReduce_562 = happySpecReduce_1 205# happyReduction_562 +happyReduction_562 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Star) -> + happyIn214 + (star_name (nIS happy_var_1) + )} + +happyReduce_563 = happySpecReduce_1 206# happyReduction_563 +happyReduction_563 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn215 + (let Loc l (VarSym v) = happy_var_1 in Symbol (nIS l) v + )} + +happyReduce_564 = happySpecReduce_1 206# happyReduction_564 +happyReduction_564 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Exclamation) -> + happyIn215 + (bang_name (nIS happy_var_1) + )} + +happyReduce_565 = happySpecReduce_1 206# happyReduction_565 +happyReduction_565 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Dot) -> + happyIn215 + (dot_name (nIS happy_var_1) + )} + +happyReduce_566 = happySpecReduce_1 206# happyReduction_566 +happyReduction_566 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 Star) -> + happyIn215 + (star_name (nIS happy_var_1) + )} + +happyReduce_567 = happySpecReduce_1 207# happyReduction_567 +happyReduction_567 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn216 + (let {Loc l (QVarSym q) = happy_var_1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) + )} + +happyReduce_568 = happySpecReduce_1 208# happyReduction_568 +happyReduction_568 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (IntTok i) = happy_var_1 in Int (nIS l) i + )} + +happyReduce_569 = happySpecReduce_1 208# happyReduction_569 +happyReduction_569 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (Character c) = happy_var_1 in Char (nIS l) c + )} + +happyReduce_570 = happySpecReduce_1 208# happyReduction_570 +happyReduction_570 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (FloatTok r) = happy_var_1 in Frac (nIS l) r + )} + +happyReduce_571 = happySpecReduce_1 208# happyReduction_571 +happyReduction_571 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (StringTok s) = happy_var_1 in String (nIS l) s + )} + +happyReduce_572 = happySpecReduce_1 208# happyReduction_572 +happyReduction_572 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (IntTokHash i) = happy_var_1 in PrimInt (nIS l) i + )} + +happyReduce_573 = happySpecReduce_1 208# happyReduction_573 +happyReduction_573 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (WordTokHash w) = happy_var_1 in PrimWord (nIS l) w + )} + +happyReduce_574 = happySpecReduce_1 208# happyReduction_574 +happyReduction_574 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (FloatTokHash f) = happy_var_1 in PrimFloat (nIS l) f + )} + +happyReduce_575 = happySpecReduce_1 208# happyReduction_575 +happyReduction_575 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (DoubleTokHash d) = happy_var_1 in PrimDouble (nIS l) d + )} + +happyReduce_576 = happySpecReduce_1 208# happyReduction_576 +happyReduction_576 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (CharacterHash c) = happy_var_1 in PrimChar (nIS l) c + )} + +happyReduce_577 = happySpecReduce_1 208# happyReduction_577 +happyReduction_577 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn217 + (let Loc l (StringHash s) = happy_var_1 in PrimString (nIS l) s + )} + +happyReduce_578 = happyMonadReduce 0# 209# happyReduction_578 +happyReduction_578 (happyRest) tk + = happyThen (( pushCurrentContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x) (return x) -}) + ) (\r -> happyReturn (happyIn218 r)) + +happyReduce_579 = happySpecReduce_1 210# happyReduction_579 +happyReduction_579 happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 VRightCurly) -> + happyIn219 + (happy_var_1 {- >>= \x -> trace (show x ++ show x ++ show x) (return x) -} + )} + +happyReduce_580 = happyMonadReduce 1# 210# happyReduction_580 +happyReduction_580 (happy_x_1 `HappyStk` + happyRest) tk + = happyThen (( popContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x ++ show x) (return x) -}) + ) (\r -> happyReturn (happyIn219 r)) + +happyReduce_581 = happySpecReduce_1 211# happyReduction_581 +happyReduction_581 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn220 + (let Loc l (ConId n) = happy_var_1 in ModuleName (nIS l) n + )} + +happyReduce_582 = happySpecReduce_1 211# happyReduction_582 +happyReduction_582 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn220 + (let Loc l (QConId n) = happy_var_1 in ModuleName (nIS l) (fst n ++ '.':snd n) + )} + +happyReduce_583 = happySpecReduce_1 212# happyReduction_583 +happyReduction_583 happy_x_1 + = case happyOut193 happy_x_1 of { happy_var_1 -> + happyIn221 + (happy_var_1 + )} + +happyReduce_584 = happySpecReduce_1 213# happyReduction_584 +happyReduction_584 happy_x_1 + = case happyOut194 happy_x_1 of { happy_var_1 -> + happyIn222 + (happy_var_1 + )} + +happyReduce_585 = happySpecReduce_1 214# happyReduction_585 +happyReduction_585 happy_x_1 + = case happyOut206 happy_x_1 of { happy_var_1 -> + happyIn223 + (happy_var_1 + )} + +happyReduce_586 = happySpecReduce_3 215# happyReduction_586 +happyReduction_586 happy_x_3 + happy_x_2 + happy_x_1 + = case happyOutTok happy_x_1 of { (Loc happy_var_1 BackQuote) -> + case happyOut223 happy_x_2 of { happy_var_2 -> + case happyOutTok happy_x_3 of { (Loc happy_var_3 BackQuote) -> + happyIn224 + (UnQual (happy_var_1 <^^> happy_var_3 <** [happy_var_1, srcInfoSpan (ann happy_var_2), happy_var_3]) happy_var_2 + )}}} + +happyReduce_587 = happySpecReduce_1 215# happyReduction_587 +happyReduction_587 happy_x_1 + = case happyOut225 happy_x_1 of { happy_var_1 -> + happyIn224 + (UnQual (ann happy_var_1) happy_var_1 + )} + +happyReduce_588 = happySpecReduce_1 216# happyReduction_588 +happyReduction_588 happy_x_1 + = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn225 + (let Loc l (VarSym x) = happy_var_1 in Symbol (nIS l) x + )} + +happyNewToken action sts stk + = lexer(\tk -> + let cont i = happyDoAction i tk action sts stk in + case tk of { + Loc _ EOF -> happyDoAction 133# tk action sts stk; + Loc _ (VarId _) -> cont 1#; + Loc _ (QVarId _) -> cont 2#; + Loc _ (IDupVarId _) -> cont 3#; + Loc _ (ILinVarId _) -> cont 4#; + Loc _ (ConId _) -> cont 5#; + Loc _ (QConId _) -> cont 6#; + Loc _ (DVarId _) -> cont 7#; + Loc _ (VarSym _) -> cont 8#; + Loc _ (ConSym _) -> cont 9#; + Loc _ (QVarSym _) -> cont 10#; + Loc _ (QConSym _) -> cont 11#; + Loc _ (IntTok _) -> cont 12#; + Loc _ (FloatTok _) -> cont 13#; + Loc _ (Character _) -> cont 14#; + Loc _ (StringTok _) -> cont 15#; + Loc _ (IntTokHash _) -> cont 16#; + Loc _ (WordTokHash _) -> cont 17#; + Loc _ (FloatTokHash _) -> cont 18#; + Loc _ (DoubleTokHash _) -> cont 19#; + Loc _ (CharacterHash _) -> cont 20#; + Loc _ (StringHash _) -> cont 21#; + Loc happy_dollar_dollar LeftParen -> cont 22#; + Loc happy_dollar_dollar RightParen -> cont 23#; + Loc happy_dollar_dollar LeftHashParen -> cont 24#; + Loc happy_dollar_dollar RightHashParen -> cont 25#; + Loc happy_dollar_dollar LeftCurlyBar -> cont 26#; + Loc happy_dollar_dollar RightCurlyBar -> cont 27#; + Loc happy_dollar_dollar SemiColon -> cont 28#; + Loc happy_dollar_dollar LeftCurly -> cont 29#; + Loc happy_dollar_dollar RightCurly -> cont 30#; + Loc happy_dollar_dollar VRightCurly -> cont 31#; + Loc happy_dollar_dollar LeftSquare -> cont 32#; + Loc happy_dollar_dollar RightSquare -> cont 33#; + Loc happy_dollar_dollar Comma -> cont 34#; + Loc happy_dollar_dollar Underscore -> cont 35#; + Loc happy_dollar_dollar BackQuote -> cont 36#; + Loc happy_dollar_dollar Dot -> cont 37#; + Loc happy_dollar_dollar DotDot -> cont 38#; + Loc happy_dollar_dollar Colon -> cont 39#; + Loc happy_dollar_dollar DoubleColon -> cont 40#; + Loc happy_dollar_dollar Equals -> cont 41#; + Loc happy_dollar_dollar Backslash -> cont 42#; + Loc happy_dollar_dollar Bar -> cont 43#; + Loc happy_dollar_dollar LeftArrow -> cont 44#; + Loc happy_dollar_dollar RightArrow -> cont 45#; + Loc happy_dollar_dollar At -> cont 46#; + Loc happy_dollar_dollar Tilde -> cont 47#; + Loc happy_dollar_dollar DoubleArrow -> cont 48#; + Loc happy_dollar_dollar Minus -> cont 49#; + Loc happy_dollar_dollar Exclamation -> cont 50#; + Loc happy_dollar_dollar Star -> cont 51#; + Loc happy_dollar_dollar LeftArrowTail -> cont 52#; + Loc happy_dollar_dollar RightArrowTail -> cont 53#; + Loc happy_dollar_dollar LeftDblArrowTail -> cont 54#; + Loc happy_dollar_dollar RightDblArrowTail -> cont 55#; + Loc happy_dollar_dollar RPGuardOpen -> cont 56#; + Loc happy_dollar_dollar RPGuardClose -> cont 57#; + Loc happy_dollar_dollar RPCAt -> cont 58#; + Loc _ (THIdEscape _) -> cont 59#; + Loc happy_dollar_dollar THParenEscape -> cont 60#; + Loc happy_dollar_dollar THExpQuote -> cont 61#; + Loc happy_dollar_dollar THPatQuote -> cont 62#; + Loc happy_dollar_dollar THTypQuote -> cont 63#; + Loc happy_dollar_dollar THDecQuote -> cont 64#; + Loc happy_dollar_dollar THCloseQuote -> cont 65#; + Loc happy_dollar_dollar THVarQuote -> cont 66#; + Loc happy_dollar_dollar THTyQuote -> cont 67#; + Loc _ (THQuasiQuote _) -> cont 68#; + Loc _ (XPCDATA _) -> cont 69#; + Loc happy_dollar_dollar XStdTagOpen -> cont 70#; + Loc happy_dollar_dollar XCloseTagOpen -> cont 71#; + Loc happy_dollar_dollar XCodeTagOpen -> cont 72#; + Loc happy_dollar_dollar XStdTagClose -> cont 73#; + Loc happy_dollar_dollar XEmptyTagClose -> cont 74#; + Loc happy_dollar_dollar XCodeTagClose -> cont 75#; + Loc happy_dollar_dollar XRPatOpen -> cont 76#; + Loc happy_dollar_dollar XRPatClose -> cont 77#; + Loc happy_dollar_dollar KW_Foreign -> cont 78#; + Loc happy_dollar_dollar KW_Export -> cont 79#; + Loc happy_dollar_dollar KW_Safe -> cont 80#; + Loc happy_dollar_dollar KW_Unsafe -> cont 81#; + Loc happy_dollar_dollar KW_Threadsafe -> cont 82#; + Loc happy_dollar_dollar KW_StdCall -> cont 83#; + Loc happy_dollar_dollar KW_CCall -> cont 84#; + Loc happy_dollar_dollar KW_As -> cont 85#; + Loc happy_dollar_dollar KW_By -> cont 86#; + Loc happy_dollar_dollar KW_Case -> cont 87#; + Loc happy_dollar_dollar KW_Class -> cont 88#; + Loc happy_dollar_dollar KW_Data -> cont 89#; + Loc happy_dollar_dollar KW_Default -> cont 90#; + Loc happy_dollar_dollar KW_Deriving -> cont 91#; + Loc happy_dollar_dollar KW_Do -> cont 92#; + Loc happy_dollar_dollar KW_Else -> cont 93#; + Loc happy_dollar_dollar KW_Family -> cont 94#; + Loc happy_dollar_dollar KW_Forall -> cont 95#; + Loc happy_dollar_dollar KW_Group -> cont 96#; + Loc happy_dollar_dollar KW_Hiding -> cont 97#; + Loc happy_dollar_dollar KW_If -> cont 98#; + Loc happy_dollar_dollar KW_Import -> cont 99#; + Loc happy_dollar_dollar KW_In -> cont 100#; + Loc happy_dollar_dollar KW_Infix -> cont 101#; + Loc happy_dollar_dollar KW_InfixL -> cont 102#; + Loc happy_dollar_dollar KW_InfixR -> cont 103#; + Loc happy_dollar_dollar KW_Instance -> cont 104#; + Loc happy_dollar_dollar KW_Let -> cont 105#; + Loc happy_dollar_dollar KW_MDo -> cont 106#; + Loc happy_dollar_dollar KW_Module -> cont 107#; + Loc happy_dollar_dollar KW_NewType -> cont 108#; + Loc happy_dollar_dollar KW_Of -> cont 109#; + Loc happy_dollar_dollar KW_Proc -> cont 110#; + Loc happy_dollar_dollar KW_Rec -> cont 111#; + Loc happy_dollar_dollar KW_Then -> cont 112#; + Loc happy_dollar_dollar KW_Type -> cont 113#; + Loc happy_dollar_dollar KW_Using -> cont 114#; + Loc happy_dollar_dollar KW_Where -> cont 115#; + Loc happy_dollar_dollar KW_Qualified -> cont 116#; + Loc _ (INLINE _) -> cont 117#; + Loc happy_dollar_dollar SPECIALISE -> cont 118#; + Loc _ (SPECIALISE_INLINE _) -> cont 119#; + Loc happy_dollar_dollar SOURCE -> cont 120#; + Loc happy_dollar_dollar RULES -> cont 121#; + Loc happy_dollar_dollar CORE -> cont 122#; + Loc happy_dollar_dollar SCC -> cont 123#; + Loc happy_dollar_dollar GENERATED -> cont 124#; + Loc happy_dollar_dollar DEPRECATED -> cont 125#; + Loc happy_dollar_dollar WARNING -> cont 126#; + Loc happy_dollar_dollar UNPACK -> cont 127#; + Loc _ (OPTIONS _) -> cont 128#; + Loc _ (CFILES _) -> cont 129#; + Loc _ (INCLUDE _) -> cont 130#; + Loc happy_dollar_dollar LANGUAGE -> cont 131#; + Loc happy_dollar_dollar PragmaEnd -> cont 132#; + _ -> 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' :: () => (Loc Token) -> P a +happyError' tk = parseError tk + +mparseModule = happySomeParser where + happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut9 x)) + +mparseExp = happySomeParser where + happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut135 x)) + +mparsePat = happySomeParser where + happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut178 x)) + +mparseDecl = happySomeParser where + happySomeParser = happyThen (happyParse 3#) (\x -> happyReturn (happyOut46 x)) + +mparseType = happySomeParser where + happySomeParser = happyThen (happyParse 4#) (\x -> happyReturn (happyOut82 x)) + +mfindOptPragmas = happySomeParser where + happySomeParser = happyThen (happyParse 5#) (\x -> happyReturn (happyOut11 x)) + +happySeq = happyDontSeq + + +type L = SrcSpanInfo -- just for convenience +type S = SrcSpan + +parseError :: Loc Token -> P a +parseError t = fail $ "Parse error: " ++ show t + +(<>) :: (Annotated a, Annotated b) => a SrcSpanInfo -> b SrcSpanInfo -> SrcSpanInfo +a <> b = ann a <++> ann b +infixl 6 <> + +-- | Class to reuse the parse function at many different types. +class Parseable ast where + -- | Parse a string with default mode. + parse :: String -> ParseResult ast + -- | Parse a string with an explicit mode. + parseWithMode :: ParseMode -> String -> ParseResult ast + -- | Parse a string with an explicit mode, returning all comments along the AST + parseWithComments :: ParseMode -> String -> ParseResult (ast, [Comment]) + +instance SrcInfo loc => Parseable (Module loc) where + parse = fmap (fmap fromSrcInfo) . parseModule + parseWithMode md = fmap (fmap fromSrcInfo) . parseModuleWithMode md + parseWithComments md s = parseModuleWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) +instance SrcInfo loc => Parseable (Exp loc) where + parse = fmap (fmap fromSrcInfo) . parseExp + parseWithMode md = fmap (fmap fromSrcInfo) . parseExpWithMode md + parseWithComments md s = parseExpWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) +instance SrcInfo loc => Parseable (Pat loc) where + parse = fmap (fmap fromSrcInfo) . parsePat + parseWithMode md = fmap (fmap fromSrcInfo) . parsePatWithMode md + parseWithComments md s = parsePatWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) +instance SrcInfo loc => Parseable (Decl loc) where + parse = fmap (fmap fromSrcInfo) . parseDecl + parseWithMode md = fmap (fmap fromSrcInfo) . parseDeclWithMode md + parseWithComments md s = parseDeclWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) +instance SrcInfo loc => Parseable (Type loc) where + parse = fmap (fmap fromSrcInfo) . parseType + parseWithMode md = fmap (fmap fromSrcInfo) . parseTypeWithMode md + parseWithComments md s = parseTypeWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs) + +-- | Parse of a string, which should contain a complete Haskell module. +parseModule :: String -> ParseResult (Module L) +parseModule = simpleParse mparseModule + +-- | Parse of a string containing a complete Haskell module, using an explicit mode. +parseModuleWithMode :: ParseMode -> String -> ParseResult (Module L) +parseModuleWithMode = modeParse mparseModule + +-- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. +parseModuleWithComments :: ParseMode -> String -> ParseResult (Module L, [Comment]) +parseModuleWithComments = commentParse mparseModule + +-- | Parse of a string containing a Haskell expression. +parseExp :: String -> ParseResult (Exp L) +parseExp = simpleParse mparseExp + +-- | Parse of a string containing a Haskell expression, using an explicit mode. +parseExpWithMode :: ParseMode -> String -> ParseResult (Exp L) +parseExpWithMode = modeParse mparseExp + +-- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. +parseExpWithComments :: ParseMode -> String -> ParseResult (Exp L, [Comment]) +parseExpWithComments = commentParse mparseExp + +-- | Parse of a string containing a Haskell pattern. +parsePat :: String -> ParseResult (Pat L) +parsePat = simpleParse mparsePat + +-- | Parse of a string containing a Haskell pattern, using an explicit mode. +parsePatWithMode :: ParseMode -> String -> ParseResult (Pat L) +parsePatWithMode = modeParse mparsePat + +-- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. +parsePatWithComments :: ParseMode -> String -> ParseResult (Pat L, [Comment]) +parsePatWithComments = commentParse mparsePat + +-- | Parse of a string containing a Haskell top-level declaration. +parseDecl :: String -> ParseResult (Decl L) +parseDecl = simpleParse mparseDecl + +-- | Parse of a string containing a Haskell top-level declaration, using an explicit mode. +parseDeclWithMode :: ParseMode -> String -> ParseResult (Decl L) +parseDeclWithMode = modeParse mparseDecl + +-- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. +parseDeclWithComments :: ParseMode -> String -> ParseResult (Decl L, [Comment]) +parseDeclWithComments = commentParse mparseDecl + +-- | Parse of a string containing a Haskell type. +parseType :: String -> ParseResult (Type L) +parseType = runParser mparseType + +-- | Parse of a string containing a Haskell type, using an explicit mode. +parseTypeWithMode :: ParseMode -> String -> ParseResult (Type L) +parseTypeWithMode mode = runParserWithMode mode mparseType + +-- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments. +parseTypeWithComments :: ParseMode -> String -> ParseResult (Type L, [Comment]) +parseTypeWithComments mode str = runParserWithModeComments mode mparseType str + + +simpleParse :: AppFixity a => P a -> String -> ParseResult a +simpleParse p = fmap (applyFixities preludeFixities) . runParser p + +modeParse :: AppFixity a => P a -> ParseMode -> String -> ParseResult a +modeParse p mode = fmap (applyFixities (fixities mode)) . runParserWithMode mode p + +commentParse :: AppFixity a => P a -> ParseMode -> String -> ParseResult (a, [Comment]) +commentParse p mode str = runParserWithModeComments mode p str + >>= \(ast, cs) -> return (applyFixities (fixities mode) ast, cs) + +-- | Partial parse of a string starting with a series of top-level option pragmas. +getTopPragmas :: String -> ParseResult [OptionPragma L] +getTopPragmas = runParser (mfindOptPragmas >>= \(ps,_,_) -> return ps) +{-# 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 Happy_GHC_Exts.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 Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -} + + (happyReduceArr Happy_Data_Array.! rule) i tk st + where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#)))))) + n -> {- nothing -} + + + happyShift new_state i tk st + where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) + where off = indexShortOffAddr happyActOffsets st + off_i = (off Happy_GHC_Exts.+# i) + check = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#)) + then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==# 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 + Happy_GHC_Exts.narrow16Int# i +#elif __GLASGOW_HASKELL__ == 500 + Happy_GHC_Exts.intToInt16# i +#else + Happy_GHC_Exts.iShiftRA# (Happy_GHC_Exts.iShiftL# i 16#) 16# +#endif + where +#if __GLASGOW_HASKELL__ >= 503 + i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low) +#else + i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.shiftL# high 8#) low) +#endif + high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#))) + low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off')) + off' = off Happy_GHC_Exts.*# 2# + + + + + +data HappyAddr = HappyA# Happy_GHC_Exts.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 Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in +-- trace "shifting the error token" $ + happyDoAction i tk new_state (HappyCons (st) (sts)) (stk) + +happyShift new_state i tk st sts stk = + happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk) + +-- happyReduce is specialised for the common cases. + +happySpecReduce_0 i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happySpecReduce_0 nt fn j tk st@((action)) sts stk + = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk) + +happySpecReduce_1 i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk') + = let r = fn v1 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_2 i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk') + = let r = fn v1 v2 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happySpecReduce_3 i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk') + = let r = fn v1 v2 v3 in + happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk')) + +happyReduce k i fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happyReduce k nt fn j tk st sts stk + = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of + sts1@((HappyCons (st1@(action)) (_))) -> + let r = fn stk in -- it doesn't hurt to always seq here... + happyDoSeq r (happyGoto nt j tk st1 sts1 r) + +happyMonadReduce k nt fn 0# tk st sts stk + = happyFail 0# tk st sts stk +happyMonadReduce k nt fn j tk st sts stk = + 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 Happy_GHC_Exts.+# nt) + new_state = indexShortOffAddr happyTable off_i + + + + +happyDrop 0# l = l +happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t + +happyDropStk 0# l = l +happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs + +----------------------------------------------------------------------------- +-- Moving to a new state after a reduction + + +happyGoto nt j tk st = + {- nothing -} + happyDoAction j tk new_state + where off = indexShortOffAddr happyGotoOffsets st + off_i = (off Happy_GHC_Exts.+# nt) + new_state = indexShortOffAddr happyTable off_i + + + + +----------------------------------------------------------------------------- +-- Error recovery (0# is the error token) + +-- parse error if we are in recovery and we fail again +happyFail 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 ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk) + +-- Internal happy errors: + +notHappyAtAll = error "Internal Happy error\n" + +----------------------------------------------------------------------------- +-- Hack to get the typechecker to accept our action functions + + +happyTcHack :: Happy_GHC_Exts.Int# -> a -> a +happyTcHack x y = y +{-# INLINE happyTcHack #-} + + +----------------------------------------------------------------------------- +-- Seq-ing. If the --strict flag is given, then Happy emits +-- happySeq = happyDoSeq +-- otherwise it emits +-- happySeq = happyDontSeq + +happyDoSeq, happyDontSeq :: a -> b -> b +happyDoSeq a b = a `seq` b +happyDontSeq a b = b + +----------------------------------------------------------------------------- +-- Don't inline any functions from the template. GHC has a nasty habit +-- of deciding to inline happyGoto everywhere, which increases the size of +-- the generated parser quite a bit. + + +{-# NOINLINE happyDoAction #-} +{-# NOINLINE happyTable #-} +{-# NOINLINE happyCheck #-} +{-# NOINLINE happyActOffsets #-} +{-# NOINLINE happyGotoOffsets #-} +{-# NOINLINE happyDefActions #-} + +{-# NOINLINE happyShift #-} +{-# NOINLINE happySpecReduce_0 #-} +{-# NOINLINE happySpecReduce_1 #-} +{-# NOINLINE happySpecReduce_2 #-} +{-# NOINLINE happySpecReduce_3 #-} +{-# NOINLINE happyReduce #-} +{-# NOINLINE happyMonadReduce #-} +{-# NOINLINE happyGoto #-} +{-# NOINLINE happyFail #-} + +-- end of Happy Template.
haskell-src-exts.cabal view
@@ -1,5 +1,5 @@ Name: haskell-src-exts-Version: 1.1.1+Version: 1.1.3 License: BSD3 License-File: LICENSE Author: Niklas Broberg@@ -53,9 +53,22 @@ Language.Haskell.Exts.Extension, Language.Haskell.Exts.Build, Language.Haskell.Exts.Fixity,- Language.Haskell.Exts.Comments+ Language.Haskell.Exts.Comments,+ + Language.Haskell.Exts.Annotated,+ Language.Haskell.Exts.Annotated.Parser,+ Language.Haskell.Exts.Annotated.Pretty,+ Language.Haskell.Exts.Annotated.Syntax,+ Language.Haskell.Exts.Annotated.Fixity,+ Language.Haskell.Exts.Annotated.Build,+ Language.Haskell.Exts.Annotated.Comments+ Other-modules: Language.Haskell.Exts.ParseMonad, Language.Haskell.Exts.Lexer, Language.Haskell.Exts.ParseUtils,- Language.Haskell.Exts.ExtScheme+ Language.Haskell.Exts.ExtScheme,+ + Language.Haskell.Exts.Annotated.ParseMonad,+ Language.Haskell.Exts.Annotated.Lexer,+ Language.Haskell.Exts.Annotated.ParseUtils Hs-source-dirs: src
+ src/Language/Haskell/Exts/Annotated.hs view
@@ -0,0 +1,99 @@+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts+-- Copyright : (c) Niklas Broberg 2004-2009+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- An umbrella module for the various functionality+-- of the package. Also provides some convenient+-- functionality for dealing directly with source files.+--+-----------------------------------------------------------------------------+module Language.Haskell.Exts.Annotated (+ -- * Re-exported modules+ module Language.Haskell.Exts.Annotated.Syntax+ , module Language.Haskell.Exts.Annotated.Build+ , module Language.Haskell.Exts.Annotated.Parser+ , module Language.Haskell.Exts.Annotated.Pretty+ , module Language.Haskell.Exts.Annotated.Fixity+ , module Language.Haskell.Exts.Annotated.SrcLoc+ , module Language.Haskell.Exts.Extension+ , module Language.Haskell.Exts.Comments+ -- * Parsing of Haskell source files+ , parseFile+ , parseFileWithMode+ , parseFileWithExts+ , parseFileContents+ , parseFileContentsWithMode+ -- * Read extensions declared in LANGUAGE pragmas+ , readExtensions+ ) where++import Language.Haskell.Exts.Annotated.Build+import Language.Haskell.Exts.Annotated.Syntax+import Language.Haskell.Exts.Annotated.Parser+import Language.Haskell.Exts.Annotated.Pretty+import Language.Haskell.Exts.Annotated.SrcLoc+import Language.Haskell.Exts.Annotated.Fixity+import Language.Haskell.Exts.Extension+import Language.Haskell.Exts.Comments++import Data.List+import Language.Preprocessor.Unlit++-- | Parse a source file on disk, using the default parse mode.+parseFile :: FilePath -> IO (ParseResult (Module SrcSpanInfo))+parseFile fp = parseFileWithMode (defaultParseMode { parseFilename = fp }) fp++-- | Parse a source file on disk, with an extra set of extensions to know about+-- on top of what the file itself declares.+parseFileWithExts :: [Extension] -> FilePath -> IO (ParseResult (Module SrcSpanInfo))+parseFileWithExts exts fp = parseFileWithMode (defaultParseMode { extensions = exts, parseFilename = fp }) fp++-- | Parse a source file on disk, supplying a custom parse mode.+parseFileWithMode :: ParseMode -> FilePath -> IO (ParseResult (Module SrcSpanInfo))+parseFileWithMode p fp = readFile fp >>= (return . parseFileContentsWithMode p)++-- | Parse a source file from a string using the default parse mode.+parseFileContents :: String -> ParseResult (Module SrcSpanInfo)+parseFileContents = parseFileContentsWithMode defaultParseMode++-- | Parse a source file from a string, with an extra set of extensions to know about+-- on top of what the file itself declares.+parseFileContentsWithExts :: [Extension] -> String -> ParseResult (Module SrcSpanInfo)+parseFileContentsWithExts exts = parseFileContentsWithMode (defaultParseMode { extensions = exts })++-- | Parse a source file from a string using a custom parse mode.+parseFileContentsWithMode :: ParseMode -> String -> ParseResult (Module SrcSpanInfo)+parseFileContentsWithMode p@(ParseMode fn exts ign _) rawStr =+ let md = delit fn $ ppContents rawStr+ allExts = impliesExts $ case (ign, readExtensions md) of+ (False,Just es) -> exts ++ es+ _ -> exts+ in parseModuleWithMode (p { extensions = allExts }) md+++-- | Gather the extensions declared in LANGUAGE pragmas+-- at the top of the file. Returns 'Nothing' if the+-- parse of the pragmas fails.+readExtensions :: String -> Maybe [Extension]+readExtensions str = case getTopPragmas str of+ ParseOk pgms -> Just (concatMap getExts pgms)+ _ -> Nothing+ where getExts :: OptionPragma l -> [Extension]+ getExts (LanguagePragma _ ns) = map readExt ns+ getExts _ = []++ readExt (Ident _ e) = classifyExtension e++ppContents :: String -> String+ppContents = unlines . f . lines+ where f (('#':_):rest) = rest+ f x = x++delit :: String -> String -> String+delit fn = if ".lhs" `isSuffixOf` fn then unlit fn else id
+ src/Language/Haskell/Exts/Annotated/Build.hs view
@@ -0,0 +1,290 @@+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Build+-- Copyright : (c) The GHC Team, 1997-2000,+-- (c) Niklas Broberg 2004+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : experimental+-- Portability : portable+--+-- This module contains combinators to use when building+-- Haskell source trees programmatically, as opposed to+-- parsing them from a string. The contents here are quite+-- experimental and will likely receive a lot of attention+-- when the rest has stabilised.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Annotated.Build (++ -- * Syntax building functions+ name, -- :: String -> Name+ sym, -- :: String -> Name+ var, -- :: Name -> Exp+ op, -- :: Name -> QOp+ qvar, -- :: Module -> Name -> Exp+ pvar, -- :: Name -> Pat+ app, -- :: Exp -> Exp -> Exp+ infixApp, -- :: Exp -> QOp -> Exp -> Exp+ appFun, -- :: Exp -> [Exp] -> Exp+ pApp, -- :: Name -> [Pat] -> Pat+ tuple, -- :: [Exp] -> Exp+ pTuple, -- :: [Pat] -> Pat+ varTuple, -- :: [Name] -> Exp+ pvarTuple, -- :: [Name] -> Pat+ function, -- :: String -> Exp+ strE, -- :: String -> Exp+ charE, -- :: Char -> Exp+ intE, -- :: Integer -> Exp+ strP, -- :: String -> Pat+ charP, -- :: Char -> Pat+ intP, -- :: Integer -> Pat+ doE, -- :: [Stmt] -> Exp+ lamE, -- :: SrcLoc -> [Pat] -> Exp -> Exp+ letE, -- :: [Decl] -> Exp -> Exp+ caseE, -- :: Exp -> [Alt] -> Exp+ alt, -- :: SrcLoc -> Pat -> Exp -> Alt+ altGW, -- :: SrcLoc -> Pat -> [Stmt] -> Exp -> Binds -> Alt+ listE, -- :: [Exp] -> Exp+ eList, -- :: Exp+ peList, -- :: Pat+ paren, -- :: Exp -> Exp+ pParen, -- :: Pat -> Pat+ qualStmt, -- :: Exp -> Stmt+ genStmt, -- :: SrcLoc -> Pat -> Exp -> Stmt+ letStmt, -- :: [Decl] -> Stmt+ binds, -- :: [Decl] -> Binds+ noBinds, -- :: Binds+ wildcard, -- :: Pat+ genNames, -- :: String -> Int -> [Name]++ -- * More advanced building+ sfun, -- :: SrcLoc -> Name -> [Name] -> Rhs -> Binds -> Decl+ simpleFun, -- :: SrcLoc -> Name -> Name -> Exp -> Decl+ patBind, -- :: SrcLoc -> Pat -> Exp -> Decl+ patBindWhere, -- :: SrcLoc -> Pat -> Exp -> [Decl] -> Decl+ nameBind, -- :: SrcLoc -> Name -> Exp -> Decl+ metaFunction, -- :: String -> [Exp] -> Exp+ metaConPat -- :: String -> [Pat] -> Pat+ ) where++import Language.Haskell.Exts.Annotated.Syntax++-----------------------------------------------------------------------------+-- Help functions for Abstract syntax++-- | An identifier with the given string as its name.+-- The string should be a valid Haskell identifier.+name :: l -> String -> Name l+name = Ident++-- | A symbol identifier. The string should be a valid+-- Haskell symbol identifier.+sym :: l -> String -> Name l+sym = Symbol++-- | A local variable as expression.+var :: l -> Name l -> Exp l+var l = Var l . UnQual l++-- | Use the given identifier as an operator.+op :: l -> Name l -> QOp l+op l = QVarOp l . UnQual l++-- | A qualified variable as expression.+qvar :: l -> ModuleName l -> Name l -> Exp l+qvar l m = Var l . Qual l m++-- | A pattern variable.+pvar :: l -> Name l -> Pat l+pvar = PVar++-- | Application of expressions by juxtaposition.+app :: l -> Exp l -> Exp l -> Exp l+app = App++-- | Apply an operator infix.+infixApp :: l -> Exp l -> QOp l -> Exp l -> Exp l+infixApp = InfixApp++-- | Apply a function to a list of arguments.+appFun :: [l] -> Exp l -> [Exp l] -> Exp l+appFun _ f [] = f+appFun (l:ls) f (a:as) = appFun ls (app l f a) as++-- | A constructor pattern, with argument patterns.+pApp :: l -> Name l -> [Pat l] -> Pat l+pApp l n = PApp l (UnQual l n)++-- | A tuple expression.+tuple :: l -> [Exp l] -> Exp l+tuple = Tuple++-- | A tuple pattern.+pTuple :: l -> [Pat l] -> Pat l+pTuple = PTuple++-- | A tuple expression consisting of variables only.+varTuple :: l -> [Name l] -> Exp l+varTuple l ns = tuple l $ map (var l) ns++-- | A tuple pattern consisting of variables only.+pvarTuple :: l -> [Name l] -> Pat l+pvarTuple l ns = pTuple l $ map (pvar l) ns++-- | A function with a given name.+function :: l -> String -> Exp l+function l = var l . Ident l++-- | A literal string expression.+strE :: l -> String -> Exp l+strE l = Lit l . String l++-- | A literal character expression.+charE :: l -> Char -> Exp l+charE l = Lit l . Char l++-- | A literal integer expression.+intE :: l -> Integer -> Exp l+intE l = Lit l . Int l++-- | A literal string pattern.+strP :: l -> String -> Pat l+strP l = PLit l . String l++-- | A literal character pattern.+charP :: l -> Char -> Pat l+charP l = PLit l . Char l++-- | A literal integer pattern.+intP :: l -> Integer -> Pat l+intP l = PLit l . Int l++-- | A do block formed by the given statements.+-- The last statement in the list should be+-- a 'Qualifier' expression.+doE :: l -> [Stmt l] -> Exp l+doE = Do++-- | Lambda abstraction, given a list of argument+-- patterns and an expression body.+lamE :: l -> [Pat l] -> Exp l -> Exp l+lamE = Lambda++-- | A @let@ ... @in@ block.+letE :: l -> [Decl l] -> Exp l -> Exp l+letE l ds e = Let l (binds l ds) e++-- | A @case@ expression.+caseE :: l -> Exp l -> [Alt l] -> Exp l+caseE = Case++-- | An unguarded alternative in a @case@ expression.+alt :: l -> Pat l -> Exp l -> Alt l+alt l p e = Alt l p (unGAlt l e) Nothing++-- | An alternative with a single guard in a @case@ expression.+altGW :: l -> Pat l -> [Stmt l] -> Exp l -> Binds l -> Alt l+altGW l p gs e w = Alt l p (gAlt l gs e) (Just w)++-- | An unguarded righthand side of a @case@ alternative.+unGAlt :: l -> Exp l -> GuardedAlts l+unGAlt = UnGuardedAlt++-- | An list of guarded righthand sides for a @case@ alternative.+gAlts :: l -> [([Stmt l], Exp l)] -> GuardedAlts l+gAlts l as = GuardedAlts l $ map (\(gs,e) -> GuardedAlt l gs e) as++-- | A single guarded righthand side for a @case@ alternative.+gAlt :: l -> [Stmt l] -> Exp l -> GuardedAlts l+gAlt l gs e = gAlts l [(gs,e)]++-- | A list expression.+listE :: l -> [Exp l] -> Exp l+listE = List++-- | The empty list expression.+eList :: l -> Exp l+eList l = List l []++-- | The empty list pattern.+peList :: l -> Pat l+peList l = PList l []++-- | Put parentheses around an expression.+paren :: l -> Exp l -> Exp l+paren = Paren++-- | Put parentheses around a pattern.+pParen :: l -> Pat l -> Pat l+pParen = PParen++-- | A qualifier expression statement.+qualStmt :: l -> Exp l -> Stmt l+qualStmt = Qualifier++-- | A generator statement: /pat/ @<-@ /exp/+genStmt :: l -> Pat l -> Exp l -> Stmt l+genStmt = Generator++-- | A @let@ binding group as a statement.+letStmt :: l -> [Decl l] -> Stmt l+letStmt l ds = LetStmt l $ binds l ds++-- | Hoist a set of declarations to a binding group.+binds :: l -> [Decl l] -> Binds l+binds = BDecls++-- | An empty binding group.+noBinds :: l -> Binds l+noBinds l = binds l []++-- | The wildcard pattern: @_@+wildcard :: l -> Pat l+wildcard = PWildCard++-- | Generate k names by appending numbers 1 through k to a given string.+genNames :: l -> String -> Int -> [Name l]+genNames l s k = [ Ident l $ s ++ show i | i <- [1..k] ]++-------------------------------------------------------------------------------+-- Some more specialised help functions++-- | A function with a single clause+sfun :: l -> Name l -> [Name l] -> Rhs l -> Maybe (Binds l) -> Decl l+sfun l f pvs rhs mbs = FunBind l [Match l f (map (pvar l) pvs) Nothing rhs mbs]++-- | A function with a single clause, a single argument, no guards+-- and no where declarations+simpleFun :: l -> Name l -> Name l -> Exp l -> Decl l+simpleFun l f a e = let rhs = UnGuardedRhs l e+ in sfun l f [a] rhs Nothing++-- | A pattern bind where the pattern is a variable, and where+-- there are no guards and no 'where' clause.+patBind :: l -> Pat l -> Exp l -> Decl l+patBind l p e = let rhs = UnGuardedRhs l e+ in PatBind l p Nothing rhs Nothing++-- | A pattern bind where the pattern is a variable, and where+-- there are no guards, but with a 'where' clause.+patBindWhere :: l -> Pat l -> Exp l -> [Decl l] -> Decl l+patBindWhere l p e ds = let rhs = UnGuardedRhs l e+ in PatBind l p Nothing rhs (Just $ binds l ds)++-- | Bind an identifier to an expression.+nameBind :: l -> Name l -> Exp l -> Decl l+nameBind l n e = patBind l (pvar l n) e++-- | Apply function of a given name to a list of arguments.+metaFunction :: l -> String -> [Exp l] -> Exp l+metaFunction l s es = mf l s (reverse es)+ where mf l s [] = var l $ name l s+ mf l s (e:es) = app l (mf l s es) e++-- | Apply a constructor of a given name to a list of pattern+-- arguments, forming a constructor pattern.+metaConPat :: l -> String -> [Pat l] -> Pat l+metaConPat l s ps = pApp l (name l s) ps
+ src/Language/Haskell/Exts/Annotated/Comments.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE CPP, DeriveDataTypeable #-} +module Language.Haskell.Exts.Annotated.Comments where + +import Language.Haskell.Exts.Annotated.SrcLoc + +#ifdef __GLASGOW_HASKELL__ +#ifdef BASE4 +import Data.Data +#else +import Data.Generics (Data(..),Typeable(..)) +#endif +#endif + +data Comment = SingleLine SrcLoc String + | MultiLine SrcLoc String +#ifdef __GLASGOW_HASKELL__ + deriving (Eq,Show,Typeable,Data) +#else + deriving (Eq,Show) +#endif
+ src/Language/Haskell/Exts/Annotated/Fixity.hs view
@@ -0,0 +1,356 @@+----------------------------------------------------------------------------- +-- | +-- Module : Language.Haskell.Exts.Fixity +-- Copyright : (c) Niklas Broberg 2009 +-- License : BSD-style (see the file LICENSE.txt) +-- +-- Maintainer : Niklas Broberg, d00nibro@chalmers.se +-- Stability : stable +-- Portability : portable +-- +-- Fixity information to give the parser so that infix operators can +-- be parsed properly. +-- +----------------------------------------------------------------------------- +module Language.Haskell.Exts.Annotated.Fixity + ( + -- * Fixity representation + Fixity(..) + -- | The following three functions all create lists of + -- fixities from textual representations of operators. + -- The intended usage is e.g. + -- + -- > fixs = infixr_ 0 ["$","$!","`seq`"] + -- + -- Note that the operators are expected as you would + -- write them infix, i.e. with ` characters surrounding + -- /varid/ operators, and /varsym/ operators written as is. + , infix_, infixl_, infixr_ + -- ** Collections of fixities + , preludeFixities, baseFixities + + -- * Applying fixities to an AST + , AppFixity(..) + ) where + +import Language.Haskell.Exts.Annotated.Syntax + +import Data.Char (isUpper) + +-- | Operator fixities are represented by their associativity +-- (left, right or none) and their precedence (0-9). +data Fixity = Fixity (Assoc ()) Int (Op ()) + +-- | All AST elements that may include expressions which in turn may +-- need fixity tweaking will be instances of this class. +class AppFixity ast where + -- | Tweak any expressions in the element to account for the + -- fixities given. Assumes that all operator expressions are + -- fully left associative chains to begin with. + applyFixities :: [Fixity] -- ^ The fixities to account for. + -> ast -- ^ The element to tweak. + -> ast -- ^ The same element, but with operator expressions updated. + + +instance AppFixity (Exp l) where + applyFixities fixs = infFix fixs . leafFix fixs + where -- This is the real meat case. We can assume a left-associative list to begin with. + infFix fixs (InfixApp l2 a op2 z) = + let e = infFix fixs a + in case e of + InfixApp l1 x op1 y -> + let (a1,p1) = askFixity fixs op1 + (a2,p2) = askFixity fixs op2 + in if (p1 == p2 && (a1 /= a2 || a1 == AssocNone ())) -- Ambiguous infix expression! + || (p1 > p2 || p1 == p2 && (a1 == AssocLeft () || a2 == AssocNone ())) -- Already right order + then InfixApp l2 e op2 z + else InfixApp l1 x op1 (infFix fixs $ InfixApp l1 y op2 z) + _ -> InfixApp l2 e op2 z + + infFix _ e = e + + +-- Internal: lookup associativity and precedence of an operator +askFixity :: [Fixity] -> QOp l -> (Assoc (), Int) +askFixity xs = \k -> lookupWithDefault (AssocLeft (), 9) (f k) mp + where + lookupWithDefault def k mp = case lookup k mp of + Nothing -> def + Just x -> x + + mp = [(x,(a,p)) | Fixity a p x <- xs] + + f (QVarOp l x) = nullAnn $ VarOp l (g x) + f (QConOp l x) = nullAnn $ ConOp l (g x) + + g (Qual _ _ x) = x + g (UnQual _ x) = x + g (Special l (Cons _)) = Symbol l ":" + +nullAnn :: Functor ast => ast l -> ast () +nullAnn = fmap (const ()) + + +-- | All fixities defined in the Prelude. +preludeFixities :: [Fixity] +preludeFixities = concat + [infixr_ 9 ["."] + ,infixl_ 9 ["!!"] + ,infixr_ 8 ["^","^^","**"] + ,infixl_ 7 ["*","/","`quot`","`rem`","`div`","`mod`",":%","%"] + ,infixl_ 6 ["+","-"] + ,infixr_ 5 [":","++"] + ,infix_ 4 ["==","/=","<","<=",">=",">","`elem`","`notElem`"] + ,infixr_ 3 ["&&"] + ,infixr_ 2 ["||"] + ,infixl_ 1 [">>",">>="] + ,infixr_ 1 ["=<<"] + ,infixr_ 0 ["$","$!","`seq`"] + ] + +-- | All fixities defined in the base package. +-- +-- Note that the @+++@ operator appears in both Control.Arrows and +-- Text.ParserCombinators.ReadP. The listed precedence for @+++@ in +-- this list is that of Control.Arrows. +baseFixities :: [Fixity] +baseFixities = preludeFixities ++ concat + [infixl_ 9 ["!","//","!:"] + ,infixl_ 8 ["`shift`","`rotate`","`shiftL`","`shiftR`","`rotateL`","`rotateR`"] + ,infixl_ 7 [".&."] + ,infixl_ 6 ["`xor`"] + ,infix_ 6 [":+"] + ,infixl_ 5 [".|."] + ,infixr_ 5 ["+:+","<++","<+>"] -- fixity conflict for +++ between ReadP and Arrow + ,infix_ 5 ["\\\\"] + ,infixl_ 4 ["<$>","<$","<*>","<*","*>","<**>"] + ,infix_ 4 ["`elemP`","`notElemP`"] + ,infixl_ 3 ["<|>"] + ,infixr_ 3 ["&&&","***"] + ,infixr_ 2 ["+++","|||"] + ,infixr_ 1 ["<=<",">=>",">>>","<<<","^<<","<<^","^>>",">>^"] + ,infixl_ 0 ["`on`"] + ,infixr_ 0 ["`par`","`pseq`"] + ] + +infixr_, infixl_, infix_ :: Int -> [String] -> [Fixity] +infixr_ = fixity $ AssocRight () +infixl_ = fixity $ AssocLeft () +infix_ = fixity $ AssocNone () + +-- Internal: help function for the above definitions. +fixity :: Assoc () -> Int -> [String] -> [Fixity] +fixity a p = map (Fixity a p . op) + where + op ('`':xs) = (if isUpper (head xs) then ConOp else VarOp) () $ Ident () $ init xs + op xs = (if head xs == ':' then ConOp else VarOp) () $ Symbol () xs + + + + + + +------------------------------------------------------------------- +-- Boilerplate - yuck!! Everything below here is internal stuff + +instance AppFixity (Module l) where + applyFixities fixs (Module l mmh prs imp decls) = + Module l mmh prs imp $ appFixDecls fixs decls + applyFixities fixs (XmlPage l os xn xas mexp cs) = + XmlPage l os xn (map fix xas) (fmap fix mexp) (map fix cs) + where fix x = applyFixities fixs x + applyFixities fixs (XmlHybrid l mmh prs imp decls xn xas mexp cs) = + XmlHybrid l mmh prs imp (appFixDecls fixs decls) + xn (map fixe xas) (fmap fixe mexp) (map fixe cs) + where fixe x = let extraFixs = getFixities decls + in applyFixities (fixs++extraFixs) x + +instance AppFixity (Decl l) where + applyFixities fixs decl = case decl of + ClassDecl l ctxt n vars deps cdecls -> ClassDecl l ctxt n vars deps $ fmap (map fix) cdecls + InstDecl l ctxt n ts idecls -> InstDecl l ctxt n ts $ fmap (map fix) idecls + SpliceDecl l spl -> SpliceDecl l $ fix spl + FunBind l matches -> FunBind l $ map fix matches + PatBind l p mt rhs bs -> PatBind l (fix p) mt (fix rhs) (fmap fix bs) + _ -> decl + where fix x = applyFixities fixs x + +appFixDecls :: [Fixity] -> [Decl l] -> [Decl l] +appFixDecls fixs decls = + let extraFixs = getFixities decls + in map (applyFixities (fixs++extraFixs)) decls + +getFixities = concatMap getFixity +getFixity (InfixDecl _ a mp ops) = let p = maybe 9 id mp in map (Fixity (nullAnn a) p) (map nullAnn ops) +getFixity _ = [] + +instance AppFixity (ClassDecl l) where + applyFixities fixs (ClsDecl l decl) = ClsDecl l $ applyFixities fixs decl + applyFixities _ cdecl = cdecl + +instance AppFixity (InstDecl l) where + applyFixities fixs (InsDecl l decl) = InsDecl l $ applyFixities fixs decl + applyFixities _ idecl = idecl + +instance AppFixity (Match l) where + applyFixities fixs (Match l n ps mt rhs bs) = Match l n (map fix ps) mt (fix rhs) (fmap fix bs) + where fix x = applyFixities fixs x + +instance AppFixity (Rhs l) where + applyFixities fixs rhs = case rhs of + UnGuardedRhs l e -> UnGuardedRhs l $ fix e + GuardedRhss l grhss -> GuardedRhss l $ map fix grhss + where fix x = applyFixities fixs x + +instance AppFixity (GuardedRhs l) where + applyFixities fixs (GuardedRhs l stmts e) = GuardedRhs l (map fix stmts) $ fix e + where fix x = applyFixities fixs x + +instance AppFixity (Pat l) where + applyFixities fixs p = case p of + PNeg l p -> PNeg l $ fix p + PInfixApp l a op b -> PInfixApp l (fix a) op (fix b) + PApp l n ps -> PApp l n $ map fix ps + PTuple l ps -> PTuple l $ map fix ps + PList l ps -> PList l $ map fix ps + PParen l p -> PParen l $ fix p + PRec l n pfs -> PRec l n $ map fix pfs + PAsPat l n p -> PAsPat l n $ fix p + PIrrPat l p -> PIrrPat l $ fix p + PatTypeSig l p t -> PatTypeSig l (fix p) t + PViewPat l e p -> PViewPat l (fix e) (fix p) + PRPat l rps -> PRPat l $ map fix rps + PXTag l n ats mp ps -> PXTag l n (map fix ats) (fmap fix mp) (map fix ps) + PXETag l n ats mp -> PXETag l n (map fix ats) (fmap fix mp) + PXPatTag l p -> PXPatTag l $ fix p + PXRPats l rps -> PXRPats l $ map fix rps + PBangPat l p -> PBangPat l $ fix p + _ -> p + where fix x = applyFixities fixs x + +instance AppFixity (PatField l) where + applyFixities fixs (PFieldPat l n p) = PFieldPat l n $ applyFixities fixs p + applyFixities _ pf = pf + +instance AppFixity (RPat l) where + applyFixities fixs rp = case rp of + RPOp l rp op -> RPOp l (fix rp) op + RPEither l a b -> RPEither l (fix a) (fix b) + RPSeq l rps -> RPSeq l $ map fix rps + RPGuard l p stmts -> RPGuard l (fix p) $ map fix stmts + RPCAs l n rp -> RPCAs l n $ fix rp + RPAs l n rp -> RPAs l n $ fix rp + RPParen l rp -> RPParen l $ fix rp + RPPat l p -> RPPat l $ fix p + where fix x = applyFixities fixs x + +instance AppFixity (PXAttr l) where + applyFixities fixs (PXAttr l n p) = PXAttr l n $ applyFixities fixs p + +instance AppFixity (Stmt l) where + applyFixities fixs stmt = case stmt of + Generator l p e -> Generator l (fix p) (fix e) + Qualifier l e -> Qualifier l $ fix e + LetStmt l bs -> LetStmt l $ fix bs -- special behavior + RecStmt l stmts -> RecStmt l $ map fix stmts + where fix x = applyFixities fixs x + +instance AppFixity (Binds l) where + applyFixities fixs bs = case bs of + BDecls l decls -> BDecls l $ appFixDecls fixs decls -- special behavior + IPBinds l ips -> IPBinds l $ map fix ips + where fix x = applyFixities fixs x + + +instance AppFixity (IPBind l) where + applyFixities fixs (IPBind l n e) = IPBind l n $ applyFixities fixs e + +instance AppFixity (FieldUpdate l) where + applyFixities fixs (FieldUpdate l n e) = FieldUpdate l n $ applyFixities fixs e + applyFixities _ fup = fup + +instance AppFixity (Alt l) where + applyFixities fixs (Alt l p galts bs) = Alt l (fix p) (fix galts) (fmap fix bs) + where fix x = applyFixities fixs x + +instance AppFixity (GuardedAlts l) where + applyFixities fixs galts = case galts of + UnGuardedAlt l e -> UnGuardedAlt l $ fix e + GuardedAlts l galts -> GuardedAlts l $ map fix galts + where fix x = applyFixities fixs x + +instance AppFixity (GuardedAlt l) where + applyFixities fixs (GuardedAlt l stmts e) = GuardedAlt l (map fix stmts) (fix e) + where fix x = applyFixities fixs x + +instance AppFixity (QualStmt l) where + applyFixities fixs qstmt = case qstmt of + QualStmt l s -> QualStmt l $ fix s + ThenTrans l e -> ThenTrans l $ fix e + ThenBy l e1 e2 -> ThenBy l (fix e1) (fix e2) + GroupBy l e -> GroupBy l (fix e) + GroupUsing l e -> GroupUsing l (fix e) + GroupByUsing l e1 e2 -> GroupByUsing l (fix e1) (fix e2) + where fix x = applyFixities fixs x + +instance AppFixity (Bracket l) where + applyFixities fixs br = case br of + ExpBracket l e -> ExpBracket l $ fix e + PatBracket l p -> PatBracket l $ fix p + DeclBracket l ds -> DeclBracket l $ map fix ds + _ -> br + where fix x = applyFixities fixs x + +instance AppFixity (Splice l) where + applyFixities fixs (ParenSplice l e) = ParenSplice l $ applyFixities fixs e + applyFixities _ s = s + +instance AppFixity (XAttr l) where + applyFixities fixs (XAttr l n e) = XAttr l n $ applyFixities fixs e + + +-- the boring boilerplate stuff for expressions too +-- Recursively fixes the "leaves" of the infix chains, +-- without yet touching the chain itself. We assume all chains are +-- left-associate to begin with. +leafFix fixs e = case e of + InfixApp l e1 op e2 -> InfixApp l (leafFix fixs e1) op (fix e2) + App l e1 e2 -> App l (fix e1) (fix e2) + NegApp l e -> NegApp l $ fix e + Lambda l pats e -> Lambda l (map fix pats) $ fix e + Let l bs e -> Let l (fix bs) $ fix e + If l e a b -> If l (fix e) (fix a) (fix b) + Case l e alts -> Case l (fix e) $ map fix alts + Do l stmts -> Do l $ map fix stmts + MDo l stmts -> MDo l $ map fix stmts + Tuple l exps -> Tuple l $ map fix exps + List l exps -> List l $ map fix exps + Paren l e -> Paren l $ fix e + LeftSection l e op -> LeftSection l (fix e) op + RightSection l op e -> RightSection l op $ fix e + RecConstr l n fups -> RecConstr l n $ map fix fups + RecUpdate l e fups -> RecUpdate l (fix e) $ map fix fups + EnumFrom l e -> EnumFrom l $ fix e + EnumFromTo l e1 e2 -> EnumFromTo l (fix e1) (fix e2) + EnumFromThen l e1 e2 -> EnumFromThen l (fix e1) (fix e2) + EnumFromThenTo l e1 e2 e3 -> EnumFromThenTo l (fix e1) (fix e2) (fix e3) + ListComp l e quals -> ListComp l (fix e) $ map fix quals + ParComp l e qualss -> ParComp l (fix e) $ map (map fix) qualss + ExpTypeSig l e t -> ExpTypeSig l (fix e) t + BracketExp l b -> BracketExp l $ fix b + SpliceExp l s -> SpliceExp l $ fix s + XTag l n ats mexp cs -> XTag l n (map fix ats) (fmap fix mexp) (map fix cs) + XETag l n ats mexp -> XETag l n (map fix ats) (fmap fix mexp) + XExpTag l e -> XExpTag l $ fix e + Proc l p e -> Proc l (fix p) (fix e) + LeftArrApp l e1 e2 -> LeftArrApp l (fix e1) (fix e2) + RightArrApp l e1 e2 -> RightArrApp l (fix e1) (fix e2) + LeftArrHighApp l e1 e2 -> LeftArrHighApp l (fix e1) (fix e2) + RightArrHighApp l e1 e2 -> RightArrHighApp l (fix e1) (fix e2) + CorePragma l s e -> CorePragma l s (fix e) + SCCPragma l s e -> SCCPragma l s (fix e) + GenPragma l s ab cd e -> GenPragma l s ab cd (fix e) + + _ -> e + where + fix x = applyFixities fixs x
+ src/Language/Haskell/Exts/Annotated/Lexer.hs view
@@ -0,0 +1,1055 @@+{-# OPTIONS_HADDOCK hide #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Lexer+-- Copyright : (c) The GHC Team, 1997-2000+-- (c) Niklas Broberg, 2004-2009+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- 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.Annotated.Lexer (Token(..), lexer) where++import Language.Haskell.Exts.Annotated.SrcLoc+import Language.Haskell.Exts.Annotated.ParseMonad+import Language.Haskell.Exts.Annotated.Comments+import Language.Haskell.Exts.Extension+import Language.Haskell.Exts.ExtScheme++import Data.Char+import Data.Ratio+import Control.Monad (when)++-- import Debug.Trace (trace)++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+ | IntTokHash Integer -- 1#+ | WordTokHash Integer -- 1##+ | FloatTokHash Rational -- 1.0#+ | DoubleTokHash Rational -- 1.0##+ | CharacterHash Char -- c#+ | StringHash String -- "Hello world!"#++-- Symbols++ | LeftParen+ | RightParen+ | LeftHashParen+ | RightHashParen+ | LeftCurlyBar+ | RightCurlyBar+ | 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+ | LeftArrowTail -- >-+ | RightArrowTail -- -<+ | LeftDblArrowTail -- >>-+ | RightDblArrowTail -- -<<++-- Template Haskell+ | THExpQuote -- [| or [e|+ | THPatQuote -- [p|+ | THDecQuote -- [d|+ | THTypQuote -- [t|+ | THCloseQuote -- |]+ | THIdEscape (String) -- dollar x+ | THParenEscape -- dollar (+ | THVarQuote -- 'x (but without the x)+ | THTyQuote -- ''T (but without the T)+ | THQuasiQuote (String,String) -- [$...|...]++-- HaRP+ | RPGuardOpen -- (|+ | RPGuardClose -- |)+ | RPCAt -- @:++-- Hsx+ | XCodeTagOpen -- <%+ | XCodeTagClose -- %>+ | XStdTagOpen -- <+ | XStdTagClose -- >+ | XCloseTagOpen -- </+ | XEmptyTagClose -- />+ | XPCDATA String+ | XRPatOpen -- <[+ | XRPatClose -- ]>++-- Pragmas++ | PragmaEnd -- #-}+-- | PragmaUnknown (String,String) -- Any pragma not recognized+ | RULES+ | INLINE Bool+ | SPECIALISE+ | SPECIALISE_INLINE Bool+ | SOURCE+ | DEPRECATED+ | WARNING+ | SCC+ | GENERATED+ | CORE+ | UNPACK+ | OPTIONS (Maybe String,String)+ | CFILES String+ | LANGUAGE+ | INCLUDE String+-- These are not yet implemented+-- | LINE++-- Reserved Ids++ | KW_As+ | KW_By -- transform list comprehensions+ | KW_Case+ | KW_Class+ | KW_Data+ | KW_Default+ | KW_Deriving+ | KW_Do+ | KW_MDo+ | KW_Else+ | KW_Family -- indexed type families+ | KW_Forall -- universal/existential types+ | KW_Group -- transform list comprehensions+ | 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_Proc -- arrows+ | KW_Rec -- arrows+ | KW_Then+ | KW_Type+ | KW_Using -- transform list comprehensions+ | KW_Where+ | 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, Maybe ExtScheme))]+reserved_ops = [+ ( "..", (DotDot, Nothing) ),+ ( ":", (Colon, Nothing) ),+ ( "::", (DoubleColon, Nothing) ),+ ( "=", (Equals, Nothing) ),+ ( "\\", (Backslash, Nothing) ),+ ( "|", (Bar, Nothing) ),+ ( "<-", (LeftArrow, Nothing) ),+ ( "->", (RightArrow, Nothing) ),+ ( "@", (At, Nothing) ),+ ( "@:", (RPCAt, Just (Any [RegularPatterns])) ),+ ( "~", (Tilde, Nothing) ),+ ( "=>", (DoubleArrow, Nothing) ),+ ( "*", (Star, Just (Any [KindSignatures])) ),+ -- Arrows notation+ ( "-<", (LeftArrowTail, Just (Any [Arrows])) ),+ ( ">-", (RightArrowTail, Just (Any [Arrows])) ),+ ( "-<<", (LeftDblArrowTail, Just (Any [Arrows])) ),+ ( ">>-", (RightDblArrowTail, Just (Any [Arrows])) )+ ]++special_varops :: [(String,(Token, Maybe ExtScheme))]+special_varops = [+ -- the dot is only a special symbol together with forall, but can still be used as function composition+ ( ".", (Dot, Just (Any [ExplicitForall, ExistentialQuantification])) ),+ ( "-", (Minus, Nothing) ),+ ( "!", (Exclamation, Nothing) )+ ]++reserved_ids :: [(String,(Token, Maybe ExtScheme))]+reserved_ids = [+ ( "_", (Underscore, Nothing) ),+ ( "by", (KW_By, Just (Any [TransformListComp])) ),+ ( "case", (KW_Case, Nothing) ),+ ( "class", (KW_Class, Nothing) ),+ ( "data", (KW_Data, Nothing) ),+ ( "default", (KW_Default, Nothing) ),+ ( "deriving", (KW_Deriving, Nothing) ),+ ( "do", (KW_Do, Nothing) ),+ ( "else", (KW_Else, Nothing) ),+ ( "family", (KW_Family, Just (Any [TypeFamilies])) ), -- indexed type families+ ( "forall", (KW_Forall, Just (Any [ExplicitForall, ExistentialQuantification])) ), -- universal/existential quantification+ ( "group", (KW_Group, Just (Any [TransformListComp])) ),+ ( "if", (KW_If, Nothing) ),+ ( "import", (KW_Import, Nothing) ),+ ( "in", (KW_In, Nothing) ),+ ( "infix", (KW_Infix, Nothing) ),+ ( "infixl", (KW_InfixL, Nothing) ),+ ( "infixr", (KW_InfixR, Nothing) ),+ ( "instance", (KW_Instance, Nothing) ),+ ( "let", (KW_Let, Nothing) ),+ ( "mdo", (KW_MDo, Just (Any [RecursiveDo])) ),+ ( "module", (KW_Module, Nothing) ),+ ( "newtype", (KW_NewType, Nothing) ),+ ( "of", (KW_Of, Nothing) ),+ ( "proc", (KW_Proc, Just (Any [Arrows])) ),+ ( "rec", (KW_Rec, Just (Any [Arrows])) ),+ ( "then", (KW_Then, Nothing) ),+ ( "type", (KW_Type, Nothing) ),+ ( "using", (KW_Using, Just (Any [TransformListComp])) ),+ ( "where", (KW_Where, Nothing) ),++-- FFI+ ( "foreign", (KW_Foreign, Just (Any [ForeignFunctionInterface])) )+ ]+++special_varids :: [(String,(Token, Maybe ExtScheme))]+special_varids = [+ ( "as", (KW_As, Nothing) ),+ ( "qualified", (KW_Qualified, Nothing) ),+ ( "hiding", (KW_Hiding, Nothing) ),++-- FFI+ ( "export", (KW_Export, Just (Any [ForeignFunctionInterface])) ),+ ( "safe", (KW_Safe, Just (Any [ForeignFunctionInterface])) ),+ ( "unsafe", (KW_Unsafe, Just (Any [ForeignFunctionInterface])) ),+ ( "threadsafe", (KW_Threadsafe, Just (Any [ForeignFunctionInterface])) ),+ ( "stdcall", (KW_StdCall, Just (Any [ForeignFunctionInterface])) ),+ ( "ccall", (KW_CCall, Just (Any [ForeignFunctionInterface])) )+ ]++pragmas :: [(String,Token)]+pragmas = [+ ( "rules", RULES ),+ ( "inline", INLINE True ),+ ( "noinline", INLINE False ),+ ( "notinline", INLINE False ),+ ( "specialise", SPECIALISE ),+ ( "specialize", SPECIALISE ),+ ( "source", SOURCE ),+ ( "deprecated", DEPRECATED ),+ ( "warning", WARNING ),+ ( "scc", SCC ),+ ( "generated", GENERATED ),+ ( "core", CORE ),+ ( "unpack", UNPACK ),+ ( "language", LANGUAGE ),+ ( "options", OPTIONS undefined ), -- we'll tweak it before use - promise!+ ( "cfiles", CFILES undefined ), -- same here...+ ( "include", INCLUDE undefined ) -- ...and here!+ ]++isIdent, isHSymbol :: Char -> Bool+isIdent c = isAlpha c || isDigit c || c == '\'' || c == '_'++isHSymbol c = c `elem` ":!#%&*./?@\\-" || ((isSymbol c || isPunctuation c) && not (c `elem` "(),;[]`{}_\"'"))++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 :: (Loc Token -> P a) -> P a+lexer = runL topLexer++topLexer :: Lex a (Loc Token)+topLexer = do+ b <- pullCtxtFlag+ if b then -- trace (show cf ++ ": " ++ show VRightCurly) $+ setBOL >> getSrcLocL >>= \l -> return (Loc (mkSrcSpan l l) VRightCurly) -- the lex context state flags that we must do an empty {} - UGLY+ else 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.+ -- We don't bother to test for XmlSyntax, since we+ -- couldn't end up in ChildCtxt otherwise.+ Just ChildCtxt | not bol && ws -> getSrcLocL >>= \l -> return $ Loc (mkSrcSpan l l) $ XPCDATA " "+ _ -> do startToken+ sl <- getSrcLocL+ t <- if bol then lexBOL -- >>= \t -> trace ("BOL: " ++ show t) (return t)+ else lexToken -- >>= \t -> trace (show t) (return t)+ el <- getSrcLocL+ return $ Loc (mkSrcSpan sl el) t++lexWhiteSpace :: Bool -> Lex a (Bool, Bool)+lexWhiteSpace bol = do+ s <- getInput+ case s of+ -- If we find a recognised pragma, we don't want to treat it as a comment.+ '{':'-':'#':rest | isRecognisedPragma rest -> return (bol, False)+ '{':'-':_ -> do+ loc <- getSrcLocL+ discard 2+ (bol, c) <- lexNestedComment bol ""+ pushComment $ MultiLine loc (reverse c)+ (bol, _) <- lexWhiteSpace bol+ return (bol, True)+ '-':'-':s | all (== '-') (takeWhile isHSymbol s) -> do+ loc <- getSrcLocL+ discard 2+ dashes <- lexWhile (== '-')+ rest <- lexWhile (/= '\n')+ s' <- getInput+ case s' of+ [] -> fail "Unterminated end-of-line comment"+ _ -> do+ lexNewline >> pushComment (SingleLine loc $ dashes ++ rest)+ 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)++isRecognisedPragma :: String -> Bool+isRecognisedPragma str = let pragma = map toLower . takeWhile isAlphaNum . dropWhile isSpace $ str+ in case lookup pragma pragmas of+ Nothing -> False+ _ -> True++lexNestedComment :: Bool -> String -> Lex a (Bool, String)+lexNestedComment bol str = do+ s <- getInput+ case s of+ '-':'}':_ -> discard 2 >> return (bol, str)+ '{':'-':_ -> do+ discard 2+ (bol, c) <- lexNestedComment bol ("-{" ++ str) -- rest of the subcomment+ lexNestedComment bol ("}-" ++ c ) -- rest of this comment+ '\t':_ -> lexTab >> lexNestedComment bol ('\t':str)+ '\n':_ -> lexNewline >> lexNestedComment True ('\n':str)+ c:_ -> discard 1 >> lexNestedComment bol (c:str)+ [] -> 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+ -- trace ("Off: " ++ (show pos)) $ do+ 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+ -- we don't bother to check XmlSyntax since we couldn't+ -- have ended up in a non-Nothing context if it wasn't+ -- enabled.+ 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+ -- if we ever end up here, then XmlSyntax must be on.+ s <- getInput+ case s of+ '<':'%':_ -> do discard 2+ pushExtContextL CodeTagCtxt+ return XCodeTagOpen+ '<':'/':_ -> do discard 2+ popExtContextL "lexChildCtxt"+ pushExtContextL CloseTagCtxt+ return XCloseTagOpen+ '<':'[':_ -> do discard 2+ pushExtContextL HarpCtxt+ return XRPatOpen+ '<':_ -> do discard 1+ pushExtContextL TagCtxt+ return XStdTagOpen+ _ -> lexPCDATA+++lexPCDATA :: Lex a Token+lexPCDATA = do+ -- if we ever end up here, then XmlSyntax must be on.+ 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 ""+ _ -> 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+ -- if we ever end up here, then XmlSyntax must be on.+ s <- getInput+ case s of+ '%':'>':_ -> do discard 2+ popExtContextL "lexCodeTagContext"+ return XCodeTagClose+ _ -> lexStdToken++lexCloseTagCtxt :: Lex a Token+lexCloseTagCtxt = do+ -- if we ever end up here, then XmlSyntax must be on.+ s <- getInput+ case s of+ '>':_ -> do discard 1+ popExtContextL "lexCloseTagCtxt"+ return XStdTagClose+ _ -> lexStdToken++lexTagCtxt :: Lex a Token+lexTagCtxt = do+ -- if we ever end up here, then XmlSyntax must be on.+ 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+ -- if we ever end up here, then RegularPatterns must be on.+ s <- getInput+ case s of+ ']':'>':_ -> do discard 2+ popExtContextL "lexHarpToken"+ return XRPatClose+ _ -> lexStdToken++lexStdToken :: Lex a Token+lexStdToken = do+ s <- getInput+ exts <- getExtensionsL+ 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 && ImplicitParams `elem` exts -> do+ discard 1+ id <- lexWhile isIdent+ return $ IDupVarId id++ '%':c:_ | isLower c && ImplicitParams `elem` exts -> do+ discard 1+ id <- lexWhile isIdent+ return $ ILinVarId id+ -- end implicit parameters++ -- harp+ '(':'|':c:_ | isHSymbol c -> discard 1 >> return LeftParen+ '(':'|':_ | RegularPatterns `elem` exts ->+ do discard 2+ return RPGuardOpen+ '|':')':_ | RegularPatterns `elem` exts ->+ do discard 2+ return RPGuardClose+ {- This is handled by the reserved_ops above.+ '@':':':_ | RegularPatterns `elem` exts ->+ do discard 2+ return RPCAt -}++ -- template haskell+ '[':'|':_ | TemplateHaskell `elem` exts -> do+ discard 2+ return $ THExpQuote++ '[':c:'|':_ | c == 'e' && TemplateHaskell `elem` exts -> do+ discard 3+ return $ THExpQuote+ | c == 'p' && TemplateHaskell `elem` exts -> do+ discard 3+ return THPatQuote+ | c == 'd' && TemplateHaskell `elem` exts -> do+ discard 3+ return THDecQuote+ | c == 't' && TemplateHaskell `elem` exts -> do+ discard 3+ return THTypQuote+ '[':'$':c:_ | isLower c && QuasiQuotes `elem` exts ->+ discard 2 >> lexQuasiQuote++ '|':']':_ | TemplateHaskell `elem` exts -> do+ discard 2+ return THCloseQuote++ '$':c:_ | isLower c && TemplateHaskell `elem` exts -> do+ discard 1+ id <- lexWhile isIdent+ return $ THIdEscape id+ | c == '(' && TemplateHaskell `elem` exts -> do+ discard 2+ return THParenEscape+ -- end template haskell++ -- hsx+ '<':'%':_ | XmlSyntax `elem` exts -> do+ discard 2+ pushExtContextL CodeTagCtxt+ return XCodeTagOpen+ '<':c:_ | isAlpha c && XmlSyntax `elem` exts -> do+ discard 1+ pushExtContextL TagCtxt+ return XStdTagOpen+ -- end hsx++ '(':'#':_ | UnboxedTuples `elem` exts -> do discard 2 >> return LeftHashParen++ '#':')':_ | UnboxedTuples `elem` exts -> do discard 2 >> return RightHashParen++ '{':'|':_ | Generics `elem` exts -> do discard 2 >> return LeftCurlyBar++ '|':'}':_ | Generics `elem` exts -> do discard 2 >> return RightCurlyBar++ -- pragmas++ '{':'-':'#':_ -> do discard 3 >> lexPragmaStart++ '#':'-':'}':_ -> do discard 3 >> return PragmaEnd++ c:_ | isDigit c -> lexDecimalOrFloat++ | isUpper c -> lexConIdOrQual ""++ | isLower c || c == '_' -> do+ idents <- lexIdents+ case idents of+ [ident] -> case lookup ident (reserved_ids ++ special_varids) of+ Just (keyword, scheme) -> do+ -- check if an extension keyword is enabled+ if isEnabled scheme exts+ then flagKW keyword >> return keyword+ else return $ VarId ident+ Nothing -> return $ VarId ident+ _ -> return $ DVarId idents++ | isHSymbol c -> do+ sym <- lexWhile isHSymbol+ return $ case lookup sym (reserved_ops ++ special_varops) of+ Just (t , scheme) ->+ -- check if an extension op is enabled+ if isEnabled scheme exts+ then t+ else case c of+ ':' -> ConSym sym+ _ -> VarSym sym+ 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++ '\'' -> lexCharacter+ '"' -> lexString++ _ -> fail ("Illegal character \'" ++ show c ++ "\'\n")++ where lexIdents :: Lex a [String]+ lexIdents = do+ ident <- lexWhile isIdent+ s <- getInput+ exts <- getExtensionsL+ case s of+ -- This is the only way we can get more than one ident in the list+ -- and it requires XmlSyntax to be on.+ '-':c:_ | XmlSyntax `elem` exts && isAlpha c -> do+ discard 1+ idents <- lexIdents+ return $ ident : idents+ '#':_ | MagicHash `elem` exts -> do+ discard 1+ return [ident ++ "#"]+ _ -> return [ident]++ lexQuasiQuote :: Lex a Token+ lexQuasiQuote = do+ -- We've seen and dropped [$ already+ ident <- lexWhile isIdent+ matchChar '|' "Malformed quasi-quote quoter"+ body <- lexQQBody+ return $ THQuasiQuote (ident, body)++ lexQQBody :: Lex a String+ lexQQBody = do+ s <- getInput+ case s of+ '\\':']':_ -> do str <- lexQQBody+ return (']':str)+ '\\':'|':_ -> do str <- lexQQBody+ return ('|':str)+ '|':']':_ -> discard 2 >> return ""+ _ -> do str <- lexWhile (not . (`elem` "\\|"))+ rest <- lexQQBody+ return (str++rest)++lexPragmaStart :: Lex a Token+lexPragmaStart = do+ lexWhile isSpace+ pr <- lexWhile isAlphaNum+ case lookup (map toLower pr) pragmas of+ Just SPECIALISE -> do+ s <- getInput+ case dropWhile isSpace $ map toLower s of+ 'i':'n':'l':'i':'n':'e':_ -> do+ lexWhile isSpace+ discard 6+ return $ SPECIALISE_INLINE True+ 'n':'o':'i':'n':'l':'i':'n':'e':_ -> do+ lexWhile isSpace+ discard 8+ return $ SPECIALISE_INLINE False+ 'n':'o':'t':'i':'n':'l':'i':'n':'e':_ -> do+ lexWhile isSpace+ discard 9+ return $ SPECIALISE_INLINE False+ _ -> return SPECIALISE++ Just (OPTIONS _) -> do -- see, I promised we'd mask out the 'undefined'+ s <- getInput+ case s of+ '_':_ -> do+ discard 1+ com <- lexWhile isIdent+ rest <- lexRawPragma+ return $ OPTIONS (Just com, rest)+ x:_ | isSpace x -> do+ rest <- lexRawPragma+ return $ OPTIONS (Nothing, rest)+ _ -> fail "Malformed Options pragma"+ Just (CFILES _) -> do+ rest <- lexRawPragma+ return $ CFILES rest+ Just (INCLUDE _) -> do+ rest <- lexRawPragma+ return $ INCLUDE rest+ Just p -> return p++ _ -> fail "Internal error: Unrecognised recognised pragma"+ -- do rawStr <- lexRawPragma+ -- return $ PragmaUnknown (pr, rawStr) -- no support for unrecognized pragmas, treat as comment+ -- discard 3 -- #-}+ -- topLexer -- we just discard it as a comment for now and restart -}++lexRawPragma :: Lex a String+lexRawPragma = do+ rpr <- lexRawPragmaAux+ return $ dropWhile isSpace rpr+ where lexRawPragmaAux = do+ rpr <- lexWhile (/='#')+ s <- getInput+ case s of+ '#':'-':'}':_ -> return rpr+ _ -> do+ discard 1+ rpr' <- lexRawPragma+ return $ rpr ++ '#':rpr'++lexDecimalOrFloat :: Lex a Token+lexDecimalOrFloat = do+ ds <- lexWhile isDigit+ rest <- getInput+ exts <- getExtensionsL+ 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+ con <- lexHash FloatTok FloatTokHash (Right DoubleTokHash)+ return $ con ((num%1) * 10^^(exponent - decimals))+ e:_ | toLower e == 'e' -> do+ exponent <- lexExponent+ con <- lexHash FloatTok FloatTokHash (Right DoubleTokHash)+ return $ con ((parseInteger 10 ds%1) * 10^^exponent)+ '#':'#':_ | MagicHash `elem` exts -> discard 2 >> return (WordTokHash (parseInteger 10 ds))+ '#':_ | MagicHash `elem` exts -> discard 1 >> return (IntTokHash (parseInteger 10 ds))+ _ -> 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"++lexHash :: (b -> Token) -> (b -> Token) -> Either String (b -> Token) -> Lex a (b -> Token)+lexHash a b c = do+ exts <- getExtensionsL+ if MagicHash `elem` exts+ then do+ r <- getInput+ case r of+ '#':'#':_ -> case c of+ Right c -> discard 2 >> return c+ Left s -> fail s+ '#':_ -> discard 1 >> return b+ _ -> return a+ else return a++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+ exts <- getExtensionsL+ case rest of+ '.':c:_+ | isLower c || c == '_' -> do -- qualified varid?+ discard 1+ ident <- lexWhile isIdent+ s <- getInput+ exts <- getExtensionsL+ ident' <- case s of+ '#':_ | MagicHash `elem` exts -> discard 1 >> return (ident ++ "#")+ _ -> return ident+ 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+ exts <- getExtensionsL+ case lookup sym reserved_ops of+ -- cannot qualify a reserved operator+ Just (_,scheme) | isEnabled scheme exts -> just_a_conid+ _ -> return $ case c of+ ':' -> QConSym (qual', sym)+ _ -> QVarSym (qual', sym)++ '#':c:_+ | not (isHSymbol c) && not (isIdent c) && MagicHash `elem` exts -> do+ discard 1+ case conid of+ ConId con -> return $ ConId $ con ++ "#"+ QConId (q,con) -> return $ QConId (q,con ++ "#")+ _ -> return conid -- not a qualified thing++lexCharacter :: Lex a Token+lexCharacter = do -- We need to keep track of not only character constants but also TH 'x and ''T+ -- We've seen ' so far+ s <- getInput+ exts <- getExtensionsL+ case s of+ '\'':_ | TemplateHaskell `elem` exts -> discard 1 >> return THTyQuote+ '\\':_ -> do+ c <- lexEscape+ matchQuote+ con <- lexHash Character CharacterHash+ (Left "Double hash not available for character literals")+ return (con c)+ c:'\'':_ -> do+ discard 2+ con <- lexHash Character CharacterHash+ (Left "Double hash not available for character literals")+ return (con c)+ _ | TemplateHaskell `elem` exts -> return THVarQuote+ _ -> fail "Improper character constant or misplaced \'"++ where matchQuote = matchChar '\'' "Improperly terminated character constant"+++lexString :: Lex a Token+lexString = loop ""+ where+ loop s = do+ r <- getInput+ exts <- getExtensionsL+ 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)+ '"':'#':_ | MagicHash `elem` exts -> do+ discard 2+ return (StringHash (reverse 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)++flagKW :: Token -> Lex a ()+flagKW t = when (t `elem` [KW_Do, KW_MDo]) flagDo
+ src/Language/Haskell/Exts/Annotated/ParseMonad.hs view
@@ -0,0 +1,405 @@+{-# OPTIONS_HADDOCK hide #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.ParseMonad+-- Copyright : Niklas Broberg (c) 2004-2009,+-- Original (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file libraries/base/LICENSE)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Monads for the Haskell parser and lexer.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Annotated.ParseMonad(+ -- * Parsing+ P, ParseResult(..), atSrcLoc, LexContext(..),+ ParseMode(..), defaultParseMode, fromParseResult,+ runParserWithMode, runParserWithModeComments, runParser,+ getSrcLoc, pushCurrentContext, popContext,+ getExtensions,+ -- * Lexing+ Lex(runL), getInput, discard, lexNewline, lexTab, lexWhile,+ alternative, checkBOL, setBOL, startToken, getOffside,+ pushContextL, popContextL, getExtensionsL, pushComment, getSrcLocL,+ -- * Harp/Hsx+ ExtContext(..),+ pushExtContextL, popExtContextL, getExtContext,+ pullCtxtFlag, flagDo,+ getModuleName+ ) where++import Language.Haskell.Exts.Annotated.SrcLoc(SrcLoc(..))+import Language.Haskell.Exts.Annotated.Fixity (Fixity, preludeFixities)+import Language.Haskell.Exts.Annotated.Comments+import Language.Haskell.Exts.Extension (Extension)++import Data.List ( intersperse )+import Control.Applicative+import Control.Monad (when)+import Data.Monoid++-- | 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++-- | Retrieve the result of a successful parse, throwing an+-- error if the parse is actually not successful.+fromParseResult :: ParseResult a -> a+fromParseResult (ParseOk a) = a+fromParseResult (ParseFailed loc str) = error $ "fromParseResult: Parse failed at ("+ ++ show (srcLine loc) ++ ":" ++ show (srcColumn loc) ++ "): " ++ str++instance Functor ParseResult where+ fmap f (ParseOk x) = ParseOk $ f x+ fmap f (ParseFailed loc msg) = ParseFailed loc msg++instance Applicative ParseResult where+ pure = ParseOk+ ParseOk f <*> x = f <$> x+ ParseFailed loc msg <*> _ = ParseFailed loc msg++instance Monad ParseResult where+ return = ParseOk+ ParseOk x >>= f = f x+ ParseFailed loc msg >>= _ = ParseFailed loc msg++instance Monoid m => Monoid (ParseResult m) where+ mempty = ParseOk mempty+ ParseOk x `mappend` ParseOk y = ParseOk $ x `mappend` y+ ParseOk x `mappend` err = err+ err `mappend` _ = err -- left-biased+++-- 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 CtxtFlag = (Bool,Bool)+-- (True,_) = We're in a do context.+-- (_, True)= Next token must be a virtual closing brace.++type ParseState = ([LexContext],[ExtContext],CtxtFlag,[Comment])++indentOfParseState :: ParseState -> Int+indentOfParseState (Layout n:_,_,_,_) = n+indentOfParseState _ = 0++-- | Static parameters governing a parse.+-- Note that the various parse functions in "Language.Haskell.Exts.Parser"+-- never look at LANGUAGE pragmas, regardless of+-- what the @ignoreLanguagePragmas@ flag is set to.+-- Only the various @parseFile@ functions in "Language.Haskell.Exts" will+-- act on it, when set to 'False'.++data ParseMode = ParseMode {+ -- | original name of the file being parsed+ parseFilename :: String,+ -- | list of extensions enabled for parsing+ extensions :: [Extension],+ -- | if 'True', the parser won't care about further extensions+ -- in LANGUAGE pragmas in source files+ ignoreLanguagePragmas :: Bool,+ -- | list of fixities to be aware of+ fixities :: [Fixity]+ }++-- | Default parameters for a parse.+-- The default is an unknown filename,+-- no extensions (i.e. Haskell 98),+-- don't ignore LANGUAGE pragmas,+-- and be aware of fixities from the 'Prelude'.+defaultParseMode :: ParseMode+defaultParseMode = ParseMode {+ parseFilename = "<unknown>.hs",+ extensions = [],+ ignoreLanguagePragmas = False,+ fixities = preludeFixities+ }++-- | 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 ([],[],(False,False),[]) 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++runParserWithModeComments :: ParseMode -> P a -> String -> ParseResult (a, [Comment])+runParserWithModeComments mode (P m) s = case m s 0 1 start ([],[],(False,False),[]) mode of+ Ok (_,_,_,cs) a -> ParseOk (a, reverse cs)+ Failed loc msg -> ParseFailed loc msg+ where start = SrcLoc {+ srcFilename = parseFilename mode,+ srcLine = 1,+ srcColumn = 1+ }++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+ lc <- getSrcLoc+ indent <- currentIndent+ dob <- pullDoStatus+ let loc = srcColumn lc+ when (dob && loc < indent+ || not dob && loc <= indent) $ pushCtxtFlag+ pushContext (Layout 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, p, c) _m -> Ok (ctxt:s, e, p, c) ()++popContext :: P ()+popContext = P $ \_i _x _y _l stk _m ->+ case stk of+ (_:s, e, p, c) -> --trace ("popping lexical scope, context now "++show s ++ "\n") $+ Ok (s, e, p, c) ()+ ([],_,_,_) -> error "Internal error: empty context in popContext"+++-- HaRP/Hsx+pushExtContext :: ExtContext -> P ()+pushExtContext ctxt = P $ \_i _x _y _l (s, e, p, c) _m -> Ok (s, ctxt:e, p, c) ()++popExtContext :: P ()+popExtContext = P $ \_i _x _y _l (s, e, p, c) _m ->+ case e of+ (_:e') ->+ Ok (s, e', p, c) ()+ [] -> error "Internal error: empty context in popExtContext"+++-- Extension-aware lexing/parsing+getExtensions :: P [Extension]+getExtensions = P $ \_i _x _y _l s m ->+ Ok s $ extensions m++pushCtxtFlag :: P ()+pushCtxtFlag =+ P $ \_i _x _y _l (s, e, (d,c), cs) _m -> case c of+ False -> Ok (s, e, (d,True), cs) ()+ _ -> error "Internal error: context flag already pushed"++pullDoStatus :: P Bool+pullDoStatus = P $ \_i _x _y _l (s, e, (d,c), cs) _m -> Ok (s,e,(False,c),cs) d+++----------------------------------------------------------------------------+-- 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++getSrcLocL :: Lex a SrcLoc+getSrcLocL = Lex $ \cont -> P $ \i x y l ->+ runP (cont (l { srcLine = y, srcColumn = x })) i x y l++pushContextL :: LexContext -> Lex a ()+pushContextL ctxt = Lex $ \cont -> P $ \r x y loc (stk, e, pst, cs) ->+ runP (cont ()) r x y loc (ctxt:stk, e, pst, cs)++popContextL :: String -> Lex a ()+popContextL fn = Lex $ \cont -> P $ \r x y loc stk -> case stk of+ (_:ctxt, e, pst, cs) -> runP (cont ()) r x y loc (ctxt, e, pst, cs)+ ([], _, _, _) -> error ("Internal error: empty context in " ++ fn)++pullCtxtFlag :: Lex a Bool+pullCtxtFlag = Lex $ \cont -> P $ \r x y loc (ct, e, (d,c), cs) ->+ runP (cont c) r x y loc (ct, e, (d,False), cs)+++flagDo :: Lex a ()+flagDo = Lex $ \cont -> P $ \r x y loc (ct, e, (d,c), cs) ->+ runP (cont ()) r x y loc (ct, e, (True,c), cs)+++-- 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, p, c) ->+ runP (cont ()) r x y loc (s, ec:e, p, c)++popExtContextL :: String -> Lex a ()+popExtContextL fn = Lex $ \cont -> P $ \r x y loc stk@(s,e,p,c) -> case e of+ (_:ec) -> runP (cont ()) r x y loc (s,ec,p,c)+ [] -> error ("Internal error: empty tag context in " ++ fn)+++-- Extension-aware lexing++getExtensionsL :: Lex a [Extension]+getExtensionsL = Lex $ \cont -> P $ \r x y loc s m ->+ runP (cont $ extensions m) r x y loc s m++-- Comments++pushComment :: Comment -> Lex a ()+pushComment c = Lex $ \cont -> P $ \r x y loc (s, e, p, cs) ->+ runP (cont ()) r x y loc (s, e, p, c:cs)
+ src/Language/Haskell/Exts/Annotated/ParseUtils.hs view
@@ -0,0 +1,1242 @@+{-# OPTIONS_HADDOCK hide #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.ParseUtils+-- Copyright : (c) Niklas Broberg 2004,+-- (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Utilities for the Haskell-exts parser.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Annotated.ParseUtils (+ splitTyConApp -- PType -> P (Name,[Type])+ , checkEnabled -- (Show e, Enabled e) => e -> P ()+ , checkPatternGuards -- [Stmt] -> P ()+ , mkRecConstrOrUpdate -- PExp -> [PFieldUpdate] -> P Exp+ , checkPrec -- Integer -> P Int+ , checkPContext -- PType -> P PContext+ , checkContext -- PContext -> P Context+ , checkAssertion -- PType -> P PAsst+ , checkDataHeader -- PType -> P (Context,Name,[TyVarBind])+ , checkClassHeader -- PType -> P (Context,Name,[TyVarBind])+ , checkInstHeader -- PType -> P (Context,QName,[Type])+ , checkDeriving -- [PType] -> P [Deriving]+ , checkPattern -- PExp -> P Pat+ , checkExpr -- PExp -> P Exp+ , checkType -- PType -> P Type+ , checkValDef -- SrcLoc -> PExp -> Maybe Type -> Rhs -> Binds -> P Decl+ , checkClassBody -- [ClassDecl] -> P [ClassDecl]+ , checkInstBody -- [InstDecl] -> P [InstDecl]+ , checkUnQual -- QName -> P Name+ , checkRevDecls -- [Decl] -> P [Decl]+ , checkRevClsDecls -- [ClassDecl] -> P [ClassDecl]+ , checkRevInstDecls -- [InstDecl] -> P [InstDecl]+ , checkDataOrNew -- DataOrNew -> [a] -> P ()+ , checkSimpleType -- PType -> P (Name, [TyVarBind])+ , checkSigVar -- PExp -> P Name+ , getGConName -- S.Exp -> P QName+ , mkTyForall -- Maybe [TyVarBind] -> PContext -> PType -> PType+ -- HaRP+ , checkRPattern -- PExp -> P RPat+ -- Hsx+ , checkEqNames -- XName -> XName -> P XName+ , checkPageModule+ , checkHybridModule+-- , mkPageModule -- [OptionPragma] -> Exp -> P Module+-- , mkPage -- Module -> SrcLoc -> Exp -> P Module+ , mkDVar -- [String] -> String+-- , mkDVarExpr -- [String] -> PExp+ -- Pragmas+ , checkRuleExpr -- PExp -> P Exp+ , readTool -- Maybe String -> Maybe Tool++ -- Parsed expressions and types+ , PExp(..), PFieldUpdate(..), ParseXAttr(..), PType(..), PContext, PAsst(..)+ , p_unit_con -- PExp+ , p_tuple_con -- Boxed -> Int -> PExp+ , p_unboxed_singleton_con -- PExp+ ) where++import Language.Haskell.Exts.Annotated.Syntax hiding ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..) )+import qualified Language.Haskell.Exts.Annotated.Syntax as S ( Type(..), Asst(..), Exp(..), FieldUpdate(..), XAttr(..) )+import Language.Haskell.Exts.Annotated.SrcLoc+import Language.Haskell.Exts.Annotated.ParseMonad+import Language.Haskell.Exts.Annotated.Pretty+import Language.Haskell.Exts.Annotated.Build+import Language.Haskell.Exts.Extension+import Language.Haskell.Exts.ExtScheme++import Data.List (intersperse)+import Data.Maybe (fromJust)+import Control.Monad (when,liftM)++--- import Debug.Trace (trace)++type L = SrcSpanInfo+type S = SrcSpan++splitTyConApp :: PType L -> P (Name L, [S.Type L])+splitTyConApp t0 = do+ (n, pts) <- split t0 []+ ts <- mapM checkType pts+ return (n,ts)+ where+ split :: PType L -> [PType L] -> P (Name L, [PType L])+ split (TyApp _ t u) ts = split t (u:ts)+ split (TyCon _ (UnQual _ t)) ts = return (t,ts)+ split (TyInfix l a op b) ts = split (TyCon l op) (a:b:ts)+ split _ _ = fail "Illegal data/newtype declaration"++-----------------------------------------------------------------------------+-- Checking for extensions++checkEnabled :: (Show e, Enabled e) => e -> P ()+checkEnabled e = do+ exts <- getExtensions+ if isEnabled e exts+ then return ()+ else fail $ show e ++ " is not enabled"++checkPatternGuards :: [Stmt L] -> P ()+checkPatternGuards [Qualifier _ _] = return ()+checkPatternGuards _ = checkEnabled PatternGuards++-----------------------------------------------------------------------------+-- Checking contexts++-- Check that a context is syntactically correct. Takes care of+-- checking for MPTCs, TypeOperators, TypeFamilies (for eq constraints)+-- and ImplicitParameters, but leaves checking of the class assertion+-- parameters for later.+checkPContext :: PType L -> P (PContext L)+checkPContext (TyTuple l Boxed ts) =+ mapM checkAssertion ts >>= return . PContext l+checkPContext (TyCon _ (Special _ (UnitCon l))) =+ return $ PContext l []+checkPContext (TyParen _ t) = do+ c <- checkAssertion t+ return $ PContext (ann c) [c]+checkPContext t = do+ c <- checkAssertion t+ return $ PContext (ann c) [c]++------------------------------------------------------------------------------------------------------------------- WORKING HERE++-- Check a single assertion according to the above, still leaving+-- the class assertion parameters for later.+checkAssertion :: PType L -> P (PAsst L)+-- We cannot even get here unless ImplicitParameters is enabled.+checkAssertion (TyPred _ p@(IParam _ _ _)) = return p+-- We cannot even get here unless TypeFamilies is enabled.+checkAssertion (TyPred _ p@(EqualP _ _ _)) = return p+checkAssertion t = checkAssertion' [] t+ where -- class assertions must have at least one argument+ checkAssertion' ts@(_:xs) (TyCon l c) = do+ when (not $ null xs) $ checkEnabled MultiParamTypeClasses+ when (isSymbol c) $ checkEnabled TypeOperators+ return $ ClassA l c ts+ checkAssertion' ts (TyApp _ a t) = do+ -- no check on t at this stage+ checkAssertion' (t:ts) a+ checkAssertion' ts (TyInfix _ a op b) =+ -- infix operators require TypeOperators+ checkEnabled TypeOperators >> checkAssertion' (a:b:ts) (TyCon (ann op) op)+ checkAssertion' ts (TyParen _ t) =+ checkAssertion' ts t+ checkAssertion' _ _ = fail "Illegal class assertion"++isSymbol :: QName L -> Bool+isSymbol (UnQual _ (Symbol _ _)) = True+isSymbol (Qual _ _ (Symbol _ _)) = True+isSymbol _ = False+++-- Checks simple contexts for class and instance+-- headers. If FlexibleContexts is enabled then+-- anything goes, otherwise only tyvars are allowed.+checkSContext :: Maybe (PContext L) -> P (Maybe (Context L))+checkSContext (Just (PContext l cs)) = liftM Just $ mapM (checkAsst True) cs >>= return . Context l+checkSContext _ = return Nothing++-- Checks ordinary contexts for sigtypes and data type+-- declarations. If FlexibleContexts is enabled then+-- anything goes, otherwise only tyvars OR tyvars+-- applied to types are allowed.+checkContext :: Maybe (PContext L) -> P (Maybe (Context L))+checkContext (Just (PContext l cs)) = liftM Just $ mapM (checkAsst False) cs >>= return . Context l+checkContext _ = return Nothing++checkAsst :: Bool -> PAsst L -> P (S.Asst L)+checkAsst isSimple asst =+ case asst of+ ClassA l qn pts -> do+ ts <- mapM (checkAsstParam isSimple) pts+ return $ S.ClassA l qn ts+ InfixA l a op b -> do+ [a,b] <- mapM (checkAsstParam isSimple) [a,b]+ return $ S.InfixA l a op b+ IParam l ipn pt -> do+ t <- checkType pt+ return $ S.IParam l ipn t+ EqualP l pa pb -> do+ a <- checkType pa+ b <- checkType pb+ return $ S.EqualP l a b++checkAsstParam :: Bool -> PType L -> P (S.Type L)+checkAsstParam isSimple t = do+ exts <- getExtensions+ if FlexibleContexts `elem` exts+ then checkType t+ else case t of+ TyVar l n -> return $ S.TyVar l n+ TyApp l pf pt | not isSimple -> do+ f <- checkAsstParam isSimple pf+ t <- checkType pt+ return $ S.TyApp l f t+ _ -> fail "Malformed context: FlexibleContexts not enabled"++-----------------------------------------------------------------------------+-- Checking Headers+++checkDataHeader :: PType L -> P (Maybe (Context L), Name L, [TyVarBind L])+checkDataHeader (TyForall _ Nothing cs t) = do+ (c,ts) <- checkSimple "data/newtype" t []+ cs <- checkContext cs+ return (cs,c,ts)+checkDataHeader t = do+ (c,ts) <- checkSimple "data/newtype" t []+ return (Nothing,c,ts)++checkClassHeader :: PType L -> P (Maybe (Context L), Name L, [TyVarBind L])+checkClassHeader (TyForall _ Nothing cs t) = do+ (c,ts) <- checkSimple "class" t []+ cs <- checkSContext cs+ return (cs,c,ts)+checkClassHeader t = do+ (c,ts) <- checkSimple "class" t []+ return (Nothing,c,ts)++checkSimple :: String -> PType L -> [TyVarBind L] -> P (Name L, [TyVarBind L])+checkSimple kw (TyApp _ l t) xs | isTyVarBind t = checkSimple kw l (toTyVarBind t : xs)+checkSimple _ (TyInfix _ t1 (UnQual _ t) t2) xs+ | isTyVarBind t1 && isTyVarBind t2 =+ checkEnabled TypeOperators >> return (t, toTyVarBind t1 : toTyVarBind t2 : xs)+checkSimple _kw (TyCon _ (UnQual _ t)) xs = do+ case t of+ Symbol _ _ -> checkEnabled TypeOperators+ _ -> return ()+ return (t,xs)+checkSimple kw _ _ = fail ("Illegal " ++ kw ++ " declaration")++isTyVarBind :: PType L -> Bool+isTyVarBind (TyVar _ _) = True+isTyVarBind (TyKind _ (TyVar _ _) _) = True+isTyVarBind _ = False++toTyVarBind :: PType L -> TyVarBind L+toTyVarBind (TyVar l n) = UnkindedVar l n+toTyVarBind (TyKind l (TyVar _ n) k) = KindedVar l n k++checkInstHeader :: PType L -> P (Maybe (Context L), QName L, [S.Type L])+checkInstHeader (TyForall _ Nothing cs t) = do+ (Deriving l c ts) <- checkInsts t []+ cs <- checkSContext cs+ return (cs, c, ts)+checkInstHeader t = do+ (Deriving _ c ts) <- checkInsts t []+ return (Nothing, c, ts)+++checkInsts :: PType L -> [PType L] -> P (Deriving L)+checkInsts (TyApp _ l t) ts = checkInsts l (t:ts)+checkInsts (TyCon l c) ts = do+ when (isSymbol c) $ checkEnabled TypeOperators+ ts <- checkTypes ts+ return $ Deriving l c ts+checkInsts (TyInfix l a op b) [] = do+ checkEnabled TypeOperators+ ts <- checkTypes [a,b]+ return $ Deriving l op ts+checkInsts (TyParen _ t) [] = checkInsts t []+checkInsts _ _ = fail "Illegal instance declaration"++checkDeriving :: [PType L] -> P [Deriving L]+checkDeriving = mapM (flip checkInsts [])++-----------------------------------------------------------------------------+-- Checking Patterns.++-- We parse patterns as expressions and check for valid patterns below,+-- converting the expression into a pattern at the same time.++checkPattern :: PExp L -> P (Pat L)+checkPattern e = checkPat e []++checkPat :: PExp L -> [Pat L] -> P (Pat L)+checkPat (Con l c) args = return (PApp l c args)+checkPat (App l f x) args = do+ x <- checkPat x []+ checkPat f (x:args)+checkPat (InfixApp _ l op r) args+ | op =~= (QVarOp () (UnQual () (Symbol () "!"))) = do+ -- We must have BangPatterns on+ checkEnabled BangPatterns+ let (e,es) = splitBang r []+ ps <- mapM checkPattern (BangPat (ann op) e:es)+ checkPat l (ps++args)+checkPat e [] = case e of+ Var l (UnQual _ x) -> return (PVar l x)+ Lit l lit -> return (PLit l lit)+ InfixApp loc l op r ->+ case op of+ QConOp _ c -> do+ l <- checkPat l []+ r <- checkPat r []+ return (PInfixApp loc l c r)+ QVarOp _ (UnQual _ (Symbol _ "+")) -> do+ case (l,r) of+ (Var _ (UnQual _ n@(Ident _ _)), Lit _ (Int _ k)) -> return (PNPlusK loc n k)+ _ -> patFail ""+ _ -> patFail ""+ TupleSection l mes ->+ if not (any ((=~=) Nothing) mes)+ then do ps <- mapM (\e -> checkPat e []) (map fromJust mes)+ return (PTuple l ps)+ else fail "Illegal tuple section in pattern"++ List l es -> do+ ps <- mapM checkRPattern es+ if all isStdPat ps+ then return . PList l $ map stripRP ps+ -- we don't allow truly regular patterns unless the extension is enabled+ else checkEnabled RegularPatterns >> return (PRPat l $ map fixRPOpPrec ps)+ where isStdPat :: RPat L -> Bool+ isStdPat (RPPat _ _) = True+ isStdPat (RPAs _ _ p) = isStdPat p+ isStdPat (RPParen _ p) = isStdPat p+ isStdPat _ = False+ stripRP :: RPat L -> Pat L+ stripRP (RPPat _ p) = p+ stripRP (RPAs l n p) = PAsPat l n (stripRP p)+ stripRP (RPParen l p) = PParen l (stripRP p)+ stripRP _ = error "cannot strip RP wrapper if not all patterns are base"++ Paren l e -> do+ p <- checkPat e []+ return (PParen l p)+ AsPat l n e -> do+ p <- checkPat e []+ return (PAsPat l n p)+ WildCard l -> return (PWildCard l)+ IrrPat l e -> do+ p <- checkPat e []+ return (PIrrPat l p)+ ViewPat l e p -> do+ e <- checkExpr e+ p <- checkPat p []+ return (PViewPat l e p)+ RecConstr l c fs -> do+ fs <- mapM checkPatField fs+ return (PRec l c fs)+ NegApp l1 (Lit l2 lit) -> return (PNeg l1 (PLit l2 lit))+ ExpTypeSig l e t -> do+ -- patterns cannot have signatures unless ScopedTypeVariables is enabled.+ checkEnabled ScopedTypeVariables+ p <- checkPat e []+ return (PatTypeSig l p t)++ -- Hsx+ XTag l 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 cps = mkChildrenPat pcs+ return $ PXTag l n pattrs mpattr cps+ XETag l n attrs mattr -> do+ pattrs <- mapM checkPAttr attrs+ mpattr <- maybe (return Nothing)+ (\e -> do p <- checkPat e []+ return $ Just p)+ mattr+ return $ PXETag l n pattrs mpattr+ XPcdata l pcdata -> return $ PXPcdata l pcdata+ XExpTag l e -> do+ p <- checkPat e []+ return $ PXPatTag l p+ XRPats l es -> do+ rps <- mapM checkRPattern es+ return (PXRPats l $ map fixRPOpPrec rps)++ -- Generics+ ExplTypeArg l qn t -> return $ PExplTypeArg l qn t++ -- QuasiQuotation+ QuasiQuote l n q -> return $ PQuasiQuote l n q++ -- BangPatterns+ BangPat l e -> do+ p <- checkPat e []+ return $ PBangPat l p++ PreOp l (QVarOp _ (UnQual _ (Symbol _ "!"))) e -> do+ checkEnabled BangPatterns+ p <- checkPat e []+ return $ PBangPat l p++ e -> patFail $ show e++checkPat e _ = patFail $ show e++splitBang :: PExp L -> [PExp L] -> (PExp L, [PExp L])+splitBang (App _ f x) es = splitBang f (x:es)+splitBang e es = (e, es)++checkPatField :: PFieldUpdate L -> P (PatField L)+checkPatField (FieldUpdate l n e) = do+ p <- checkPat e []+ return (PFieldPat l n p)+checkPatField (FieldPun l n) = return (PFieldPun l n)+checkPatField (FieldWildcard l) = return (PFieldWildcard l)++checkPAttr :: ParseXAttr L -> P (PXAttr L)+checkPAttr (XAttr l n v) = do p <- checkPat v []+ return $ PXAttr l n p++patFail :: String -> P a+patFail s = fail $ "Parse error in pattern: " ++ s++checkRPattern :: PExp L -> P (RPat L)+checkRPattern e = case e of+ SeqRP l es -> do+ rps <- mapM checkRPattern es+ return $ RPSeq l rps+ PostOp l e op -> do+ rpop <- checkRPatOp op+ rp <- checkRPattern e+ return $ RPOp l rp rpop+ GuardRP l e gs -> do+ rp <- checkPattern e+ return $ RPGuard l rp gs+ EitherRP l e1 e2 -> do+ rp1 <- checkRPattern e1+ rp2 <- checkRPattern e2+ return $ RPEither l rp1 rp2+ CAsRP l n e -> do+ rp <- checkRPattern e+ return $ RPCAs l n rp+ AsPat l n e -> do+ rp <- checkRPattern e+ return $ RPAs l n rp+ Paren l e -> do+ rp <- checkRPattern e+ return $ RPParen l rp+ _ -> do+ p <- checkPattern e+ return $ RPPat (ann p) p++checkRPatOp :: QOp L -> P (RPatOp L)+checkRPatOp o@(QVarOp l (UnQual _ (Symbol _ sym))) =+ case sym of+ "*" -> return $ RPStar l+ "*!" -> return $ RPStarG l+ "+" -> return $ RPPlus l+ "+!" -> return $ RPPlusG l+ "?" -> return $ RPOpt l+ "?!" -> return $ RPOptG l+ _ -> rpOpFail o+checkRPatOp o = rpOpFail o++rpOpFail sym = fail $ "Unrecognized regular pattern operator: " ++ show sym++fixRPOpPrec :: RPat L -> RPat L+fixRPOpPrec rp = case rp of+ RPOp l rp rpop -> fPrecOp rp (flip (RPOp l) rpop)+ RPEither l rp1 rp2 -> RPEither l (fixRPOpPrec rp1) (fixRPOpPrec rp2)+ RPSeq l rps -> RPSeq l $ map fixRPOpPrec rps+ RPCAs l n rp -> RPCAs l n $ fixRPOpPrec rp+ RPAs l n rp -> RPAs l n $ fixRPOpPrec rp+ RPParen l rp -> RPParen l $ fixRPOpPrec rp+ _ -> rp++ where fPrecOp :: RPat L -> (RPat L -> RPat L) -> RPat L+ fPrecOp (RPOp l rp rpop) f = fPrecOp rp (f . flip (RPOp l) rpop)+ fPrecOp (RPCAs l n rp) f = fPrecAs rp f (RPCAs l n)+ fPrecOp (RPAs l n rp) f = fPrecAs rp f (RPAs l n)+ fPrecOp rp f = f $ fixRPOpPrec rp+ fPrecAs :: RPat L -> (RPat L -> RPat L) -> (RPat L -> RPat L) -> RPat L+ fPrecAs (RPCAs l n rp) f g = fPrecAs rp f (g . RPCAs l n)+ fPrecAs (RPAs l n rp) f g = fPrecAs rp f (g . RPAs l n)+ fPrecAs rp f g = g . f $ fixRPOpPrec rp+++mkChildrenPat :: [Pat L] -> [Pat L]+mkChildrenPat ps = mkCPAux ps []+ where mkCPAux :: [Pat L] -> [Pat L] -> [Pat L]+ mkCPAux [] qs = reverse qs+ mkCPAux (p:ps) qs = case p of+ (PRPat l rps) -> [mkCRP l ps (reverse rps ++ map (\q -> RPPat (ann q) q) qs)]+ _ -> mkCPAux ps (p:qs)++ mkCRP :: L -> [Pat L] -> [RPat L] -> Pat L+ mkCRP l [] rps = PXRPats l $ reverse rps+ mkCRP _ (p:ps) rps = case p of+ (PXRPats l rqs) -> mkCRP l ps (reverse rqs ++ rps)+ _ -> mkCRP (ann p) ps (RPPat (ann p) p : rps)++-----------------------------------------------------------------------------+-- Check Expression Syntax++checkExpr :: PExp L -> P (S.Exp L)+checkExpr e = case e of+ Var l v -> return $ S.Var l v+ IPVar l v -> return $ S.IPVar l v+ Con l c -> return $ S.Con l c+ Lit l lit -> return $ S.Lit l lit+ InfixApp l e1 op e2 -> check2Exprs e1 e2 (flip (S.InfixApp l) op)+ App l e1 e2 -> check2Exprs e1 e2 (S.App l)+ NegApp l e -> check1Expr e (S.NegApp l)+ Lambda loc ps e -> check1Expr e (S.Lambda loc ps)+ Let l bs e -> check1Expr e (S.Let l bs)+ If l e1 e2 e3 -> check3Exprs e1 e2 e3 (S.If l)+ Case l e alts -> do+ e <- checkExpr e+ return (S.Case l e alts)+ Do l stmts -> checkDo stmts >> return (S.Do l stmts)+ MDo l stmts -> checkDo stmts >> return (S.MDo l stmts)+ TupleSection l mes -> if not (any ((=~=) Nothing) mes)+ then checkManyExprs (map fromJust mes) (S.Tuple l)+ else do checkEnabled TupleSections+ mes' <- mapM mCheckExpr mes+ return $ S.TupleSection l mes'+++ List l es -> checkManyExprs es (S.List l)+ -- Since we don't parse things as left or right sections, we need to mangle them into that.+ Paren l e -> case e of+ PostOp _ e1 op -> check1Expr e1 (flip (S.LeftSection l) op)+ PreOp _ op e2 -> check1Expr e2 (S.RightSection l op)+ _ -> check1Expr e (S.Paren l)+ RecConstr l c fields -> do+ fields <- mapM checkField fields+ return (S.RecConstr l c fields)+ RecUpdate l e fields -> do+ fields <- mapM checkField fields+ e <- checkExpr e+ return (S.RecUpdate l e fields)+ EnumFrom l e -> check1Expr e (S.EnumFrom l)+ EnumFromTo l e1 e2 -> check2Exprs e1 e2 (S.EnumFromTo l)+ EnumFromThen l e1 e2 -> check2Exprs e1 e2 (S.EnumFromThen l)+ EnumFromThenTo l e1 e2 e3 -> check3Exprs e1 e2 e3 (S.EnumFromThenTo l)+ -- a parallel list comprehension, which could be just a simple one+ ParComp l e qualss -> do+ e <- checkExpr e+ case qualss of+ [quals] -> return (S.ListComp l e quals)+ _ -> return (S.ParComp l e qualss)+ ExpTypeSig loc e ty -> do+ e <- checkExpr e+ return (S.ExpTypeSig loc e ty)++ --Template Haskell+ BracketExp l e -> return $ S.BracketExp l e+ SpliceExp l e -> return $ S.SpliceExp l e+ TypQuote l q -> return $ S.TypQuote l q+ VarQuote l q -> return $ S.VarQuote l q+ QuasiQuote l n q -> return $ S.QuasiQuote l n q++ -- Hsx+ XTag l n attrs mattr cs -> do attrs <- mapM checkAttr attrs+ cs <- mapM checkExpr cs+ mattr <- maybe (return Nothing)+ (\e -> checkExpr e >>= return . Just)+ mattr+ return $ S.XTag l n attrs mattr cs+ XETag l n attrs mattr -> do attrs <- mapM checkAttr attrs+ mattr <- maybe (return Nothing)+ (\e -> checkExpr e >>= return . Just)+ mattr+ return $ S.XETag l n attrs mattr+ XPcdata l p -> return $ S.XPcdata l p+ XExpTag l e -> do e <- checkExpr e+ return $ S.XExpTag l e+ -- Pragmas+ CorePragma l s e -> check1Expr e (S.CorePragma l s)+ SCCPragma l s e -> check1Expr e (S.SCCPragma l s)+ GenPragma l s xx yy e -> check1Expr e (S.GenPragma l s xx yy)+-- UnknownExpPragma n s -> return $ S.UnknownExpPragma n s++ -- Arrows+ Proc l p e -> do e <- checkExpr e+ return $ S.Proc l p e+ LeftArrApp l e1 e2 -> check2Exprs e1 e2 (S.LeftArrApp l)+ RightArrApp l e1 e2 -> check2Exprs e1 e2 (S.RightArrApp l)+ LeftArrHighApp l e1 e2 -> check2Exprs e1 e2 (S.LeftArrHighApp l)+ RightArrHighApp l e1 e2 -> check2Exprs e1 e2 (S.RightArrHighApp l)++ _ -> fail $ "Parse error in expression: " ++ show e++checkAttr :: ParseXAttr L -> P (S.XAttr L)+checkAttr (XAttr l n v) = do v <- checkExpr v+ return $ S.XAttr l n v++checkDo [] = error "Parse error: Last statement in a do-block must be an expression"+checkDo [Qualifier _ _] = return ()+checkDo (_:xs) = checkDo xs++-- type signature for polymorphic recursion!!+check1Expr :: PExp L -> (S.Exp L -> a) -> P a+check1Expr e1 f = do+ e1 <- checkExpr e1+ return (f e1)++check2Exprs :: PExp L -> PExp L -> (S.Exp L -> S.Exp L -> a) -> P a+check2Exprs e1 e2 f = do+ e1 <- checkExpr e1+ e2 <- checkExpr e2+ return (f e1 e2)++check3Exprs :: PExp L -> PExp L -> PExp L -> (S.Exp L -> S.Exp L -> S.Exp L -> a) -> P a+check3Exprs e1 e2 e3 f = do+ e1 <- checkExpr e1+ e2 <- checkExpr e2+ e3 <- checkExpr e3+ return (f e1 e2 e3)++checkManyExprs :: [PExp L] -> ([S.Exp L] -> a) -> P a+checkManyExprs es f = do+ es <- mapM checkExpr es+ return (f es)++mCheckExpr :: Maybe (PExp L) -> P (Maybe (S.Exp L))+mCheckExpr Nothing = return Nothing+mCheckExpr (Just e) = checkExpr e >>= return . Just++checkRuleExpr :: PExp L -> P (S.Exp L)+checkRuleExpr = checkExpr++readTool :: Maybe String -> Maybe Tool+readTool = fmap readC+ where readC str = case str of+ "GHC" -> GHC+ "HUGS" -> HUGS+ "NHC98" -> NHC98+ "YHC" -> YHC+ "HADDOCK" -> HADDOCK+ _ -> UnknownTool str++checkField :: PFieldUpdate L -> P (S.FieldUpdate L)+checkField (FieldUpdate l n e) = check1Expr e (S.FieldUpdate l n)+checkField (FieldPun l n) = return $ S.FieldPun l n+checkField (FieldWildcard l) = return $ S.FieldWildcard l++getGConName :: S.Exp L -> P (QName L)+getGConName (S.Con _ n) = return n+getGConName (S.List l []) = return (list_cons_name l)+getGConName _ = fail "Expression in reification is not a name"++-----------------------------------------------------------------------------+-- Check Equation Syntax++checkValDef :: L -> PExp L -> Maybe (S.Type L) -> Rhs L -> Maybe (Binds L) -> P (Decl L)+checkValDef l lhs optsig rhs whereBinds = do+ mlhs <- isFunLhs lhs []+ case mlhs of+ Just (f,es) -> do+ ps <- mapM checkPattern es+ case optsig of -- only pattern bindings can have signatures+ Nothing -> return (FunBind l [Match l f ps optsig rhs whereBinds])+ Just _ -> fail "Cannot give an explicit type signature to a function binding"+ Nothing -> do+ lhs <- checkPattern lhs+ return (PatBind l lhs optsig rhs whereBinds)++-- A variable binding is parsed as an PatBind.++isFunLhs :: PExp L -> [PExp L] -> P (Maybe (Name L, [PExp L]))+isFunLhs (InfixApp _ l (QVarOp loc (UnQual _ op)) r) es+ | op =~= (Symbol () "!") = do+ exts <- getExtensions+ if BangPatterns `elem` exts+ then let (b,bs) = splitBang r []+ in isFunLhs l (BangPat loc b : bs ++ es)+ else return $ Just (op, l:r:es) -- It's actually a definition of the operator !+ | otherwise = return $ Just (op, l:r:es)+isFunLhs (App _ (Var _ (UnQual _ f)) e) es = return $ Just (f, e:es)+isFunLhs (App _ f e) es = isFunLhs f (e:es)+isFunLhs (Var _ (UnQual _ f)) es@(_:_) = return $ Just (f, es)+isFunLhs (Paren _ f) es@(_:_) = isFunLhs f es+isFunLhs _ _ = return Nothing++-- Separating between signature declarations and value definitions in+-- a post-processing step++checkSigVar :: PExp L -> P (Name L)+checkSigVar (Var _ (UnQual _ n)) = return n+checkSigVar e = fail $ "Left-hand side of type signature is not a variable: " ++ show e++-----------------------------------------------------------------------------+-- In a class or instance body, a pattern binding must be of a variable.++checkClassBody :: [ClassDecl L] -> P [ClassDecl L]+checkClassBody decls = do+ mapM_ checkClassMethodDef decls+ return decls+ where checkClassMethodDef (ClsDecl _ decl) = checkMethodDef decl+ checkClassMethodDef _ = return ()++checkInstBody :: [InstDecl L] -> P [InstDecl L]+checkInstBody decls = do+ mapM_ checkInstMethodDef decls+ return decls+ where checkInstMethodDef (InsDecl _ decl) = checkMethodDef decl+ checkInstMethodDef _ = return ()++checkMethodDef :: Decl L -> P ()+checkMethodDef (PatBind _ (PVar _ _) _ _ _) = return ()+checkMethodDef (PatBind 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 :: QName L -> P (Name L)+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 :: XName L -> XName L -> P (XName L)+checkEqNames n@(XName _ n1) (XName _ n2)+ | n1 == n2 = return n+ | otherwise = fail "names in matching xml tags are not equal"+checkEqNames n@(XDomName _ d1 n1) (XDomName _ 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 :: PExp L -> [PFieldUpdate L] -> P (PExp L)+mkRecConstrOrUpdate (Con l c) fs = return (RecConstr l c fs)+mkRecConstrOrUpdate e fs@(_:_) = return (RecUpdate (ann e) e fs)+mkRecConstrOrUpdate _ _ = fail "Empty record update"++-----------------------------------------------------------------------------+-- Reverse a list of declarations, merging adjacent FunBinds of the+-- same name and checking that their arities match.++checkRevDecls :: [Decl L] -> P [Decl L]+checkRevDecls = mergeFunBinds []+ where+ mergeFunBinds revDs [] = return revDs+ mergeFunBinds revDs (FunBind l ms1@(Match _ name ps _ _ _:_):ds1) =+ mergeMatches ms1 ds1+ where+ arity = length ps+ mergeMatches ms' (FunBind _ ms@(Match 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 (FunBind l ms':revDs) ds+ mergeFunBinds revDs (d:ds) = mergeFunBinds (d:revDs) ds++checkRevClsDecls :: [ClassDecl L] -> P [ClassDecl L]+checkRevClsDecls = mergeClsFunBinds []+ where+ mergeClsFunBinds revDs [] = return revDs+ mergeClsFunBinds revDs (ClsDecl l (FunBind _ ms1@(Match _ name ps _ _ _:_)):ds1) =+ mergeMatches ms1 ds1+ where+ arity = length ps+ mergeMatches ms' (ClsDecl _ (FunBind _ ms@(Match 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 (ClsDecl l (FunBind l ms'):revDs) ds+ mergeClsFunBinds revDs (d:ds) = mergeClsFunBinds (d:revDs) ds++checkRevInstDecls :: [InstDecl L] -> P [InstDecl L]+checkRevInstDecls = mergeInstFunBinds []+ where+ mergeInstFunBinds :: [InstDecl L] -> [InstDecl L] -> P [InstDecl L]+ mergeInstFunBinds revDs [] = return revDs+ mergeInstFunBinds revDs (InsDecl l (FunBind _ ms1@(Match _ name ps _ _ _:_)):ds1) =+ mergeMatches ms1 ds1+ where+ arity = length ps+ mergeMatches ms' (InsDecl _ (FunBind _ ms@(Match 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 (InsDecl l (FunBind l ms'):revDs) ds+ mergeInstFunBinds revDs (d:ds) = mergeInstFunBinds (d:revDs) ds++----------------------------------------------------------------+-- Check that newtype declarations have+-- the right number (1) of constructors++checkDataOrNew :: DataOrNew L -> [a] -> P ()+checkDataOrNew (NewType _) [x] = return ()+checkDataOrNew (DataType _) _ = return ()+checkDataOrNew _ _ = fail "newtype declaration must have exactly one constructor."++checkSimpleType :: PType L -> P (Name L, [TyVarBind L])+checkSimpleType t = checkSimple "test" t []++---------------------------------------+-- Check actual types++checkType :: PType L -> P (S.Type L)+checkType t = checkT t False++checkT :: PType L -> Bool -> P (S.Type L)+checkT t simple = case t of+ TyForall l tvs@Nothing cs pt -> do+ when (simple) $ checkEnabled ExplicitForall+ ctxt <- checkContext cs+ check1Type pt (S.TyForall l Nothing ctxt)+ TyForall l tvs cs pt -> do+ checkEnabled ExplicitForall+ ctxt <- checkContext cs+ check1Type pt (S.TyForall l tvs ctxt)+ TyFun l at rt -> check2Types at rt (S.TyFun l)+ TyTuple l b pts -> checkTypes pts >>= return . S.TyTuple l b+ TyList l pt -> check1Type pt (S.TyList l)+ TyApp l ft at -> check2Types ft at (S.TyApp l)+ TyVar l n -> return $ S.TyVar l n+ TyCon l n -> do+ when (isSymbol n) $ checkEnabled TypeOperators+ return $ S.TyCon l n+ TyParen l pt -> check1Type pt (S.TyParen l)+ -- TyPred cannot be a valid type+ -- Here we know that t will be used as an actual type (and not a data constructor)+ -- so we can check that TypeOperators are enabled.+ TyInfix l at op bt -> checkEnabled TypeOperators >> check2Types at bt (flip (S.TyInfix l) op)+ TyKind l pt k -> check1Type pt (flip (S.TyKind l) k)++check1Type :: PType L -> (S.Type L -> S.Type L) -> P (S.Type L)+check1Type pt f = checkT pt True >>= return . f++check2Types :: PType L -> PType L -> (S.Type L -> S.Type L -> S.Type L) -> P (S.Type L)+check2Types at bt f = checkT at True >>= \a -> checkT bt True >>= \b -> return (f a b)++checkTypes :: [PType L] -> P [S.Type L]+checkTypes = mapM (flip checkT True)++---------------------------------------+-- Converting a complete page++checkPageModule :: PExp L -> ([OptionPragma L],[S],L) -> P (Module L)+checkPageModule xml (os,ss,inf) = do+ xml <- checkExpr xml+ case xml of+ S.XTag l xn ats mattr cs -> return $ XmlPage (inf<++>l<**(srcInfoPoints l ++ ss)) os xn ats mattr cs+ S.XETag l xn ats mattr -> return $ XmlPage (inf<++>l<**(srcInfoPoints l ++ ss)) os xn ats mattr []++checkHybridModule :: PExp L -> Module L -> S -> S -> P (Module L)+checkHybridModule xml (Module inf mh os is ds) s1 s2 = do+ xml <- checkExpr xml+ case xml of+ S.XTag l xn ats mattr cs -> return $ XmlHybrid (inf<++>l<**(s1 : srcInfoPoints inf ++ s2 : srcInfoPoints l))+ mh os is ds xn ats mattr cs+ S.XETag l xn ats mattr -> return $ XmlHybrid (inf<++>l<**(s1 : srcInfoPoints inf ++ s2 : srcInfoPoints l))+ mh os is ds xn ats mattr []++{-+pageFun :: L -> S.Exp L -> Decl L+pageFun loc e = PatBind loc namePat Nothing rhs Nothing+ where namePat = PVar loc $ Ident loc "page"+ rhs = UnGuardedRhs (ann e) e++mkPage :: Module L -> L -> S.Exp L -> P (Module L)+mkPage (Module src mmh os imps decls) loc xml = do+ let page = pageFun loc xml+ return $ Module src mmh os imps (decls ++ [page])++mkPageModule :: [OptionPragma L] -> S.Exp L -> P (Module L)+mkPageModule os xml = do+ do loc <- case xml of+ S.XTag l _ _ _ _ -> return l+ S.XETag l _ _ _ -> return l+ _ -> fail "Will not happen since mkPageModule is only called on XML expressions"+ mod <- getModuleName+ return $ (Module+ loc+ (ModuleName loc mod)+ os+ Nothing+ (Just (ExportSpecList loc [EVar loc $ UnQual loc $ Ident loc "page"]))+ []+ [pageFun loc xml])+-}+---------------------------------------+-- Handle dash-identifiers++mkDVar :: [String] -> String+mkDVar = concat . intersperse "-"++--mkDVarExpr :: L -> [String] -> PExp L+--mkDVarExpr l = foldl1 (\x y -> InfixApp l x (op $ sym "-") y) . map (Var l . UnQual l . name)++---------------------------------------+-- Combine adjacent for-alls. NO!+--+-- A valid type must have one for-all at the top of the type, or of the fn arg types++mkTyForall :: L -> Maybe [TyVarBind L] -> Maybe (PContext L) -> PType L -> PType L+--mkTyForall l mtvs (PContext _ []) ty = mk_forall_ty l mtvs ty+mkTyForall l mtvs ctxt ty = TyForall l mtvs ctxt ty++{-- mk_forall_ty makes a pure for-all type (no context)+mk_forall_ty l (Just []) ty = ty -- Explicit for-all with no tyvars+mk_forall_ty l mtvs1 (TyForall _ mtvs2 ctxt ty) = mkTyForall l (mtvs1 `plus` mtvs2) ctxt ty+mk_forall_ty l mtvs1 ty = TyForall l mtvs1 (PContext l []) ty++mtvs1 `plus` Nothing = mtvs1+Nothing `plus` mtvs2 = mtvs2+(Just tvs1) `plus` (Just tvs2) = Just (tvs1 ++ tvs2)+-}+---------------------------------------+-- Expressions as we parse them (and patters, and regular patterns)++data PExp l+ = Var l (QName l) -- ^ variable+ | IPVar l (IPName l) -- ^ implicit parameter variable+ | Con l (QName l) -- ^ data constructor+ | Lit l (Literal l) -- ^ literal constant+ | InfixApp l (PExp l) (QOp l) (PExp l) -- ^ infix application+ | App l (PExp l) (PExp l) -- ^ ordinary application+ | NegApp l (PExp l) -- ^ negation expression @-@ /exp/+ | Lambda l [Pat l] (PExp l) -- ^ lambda expression+ | Let l (Binds l) (PExp l) -- ^ local declarations with @let@+ | If l (PExp l) (PExp l) (PExp l) -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/+ | Case l (PExp l) [Alt l] -- ^ @case@ /exp/ @of@ /alts/+ | Do l [Stmt l] -- ^ @do@-expression:+ -- the last statement in the list+ -- should be an expression.+ | MDo l [Stmt l] -- ^ @mdo@-expression+-- | Tuple [PExp] -- ^ tuple expression+ | TupleSection l [Maybe (PExp l)] -- ^ tuple section expression, e.g. @(,,3)@+ | List l [PExp l] -- ^ list expression+ | Paren l (PExp l) -- ^ parenthesized expression+-- RightSection QOp PExp -- ^ right section @(@/qop/ /exp/@)@+ | RecConstr l (QName l) [PFieldUpdate l]+ -- ^ record construction expression+ | RecUpdate l (PExp l) [PFieldUpdate l]+ -- ^ record update expression+ | EnumFrom l (PExp l) -- ^ unbounded arithmetic sequence,+ -- incrementing by 1+ | EnumFromTo l (PExp l) (PExp l) -- ^ bounded arithmetic sequence,+ -- incrementing by 1+ | EnumFromThen l (PExp l) (PExp l) -- ^ unbounded arithmetic sequence,+ -- with first two elements given+ | EnumFromThenTo l (PExp l) (PExp l) (PExp l)+ -- ^ bounded arithmetic sequence,+ -- with first two elements given+ | ParComp l (PExp l) [[QualStmt l]] -- ^ parallel list comprehension+ | ExpTypeSig l (PExp l) (S.Type l)+ -- ^ expression type signature+ | AsPat l (Name l) (PExp l) -- ^ patterns only+ | WildCard l -- ^ patterns only+ | IrrPat l (PExp l) -- ^ patterns only++-- Post-ops for parsing left sections and regular patterns. Not to be left in the final tree.+ | PostOp l (PExp l) (QOp l) -- ^ post-ops+ | PreOp l (QOp l) (PExp l) -- ^ pre-ops++-- View patterns+ | ViewPat l (PExp l) (PExp l) -- ^ patterns only++-- HaRP+ | SeqRP l [PExp l] -- ^ regular patterns only+ | GuardRP l (PExp l) [Stmt l] -- ^ regular patterns only+ | EitherRP l (PExp l) (PExp l) -- ^ regular patterns only+ | CAsRP l (Name l) (PExp l) -- ^ regular patterns only++-- Template Haskell+ | VarQuote l (QName l) -- ^ 'x+ | TypQuote l (QName l) -- ^ ''T+ | BracketExp l (Bracket l)+ | SpliceExp l (Splice l)+ | QuasiQuote l String String -- ^ [$...|...]++-- Hsx+ | XTag l (XName l) [ParseXAttr l] (Maybe (PExp l)) [PExp l]+ | XETag l (XName l) [ParseXAttr l] (Maybe (PExp l))+ | XPcdata l String+ | XExpTag l (PExp l)+ | XRPats l [PExp l]++-- Pragmas+ | CorePragma l String (PExp l)+ | SCCPragma l String (PExp l)+ | GenPragma l String (Int, Int) (Int, Int) (PExp l)+-- | UnknownExpPragma String String++-- Generics+ | ExplTypeArg l (QName l) (S.Type l) -- ^ f {| Int |} x = ...++-- Bang Patterns+ | BangPat l (PExp l) -- ^ f !a = ...++-- Arrows+ | Proc l (Pat l) (PExp l)+ | LeftArrApp l (PExp l) (PExp l)+ | RightArrApp l (PExp l) (PExp l)+ | LeftArrHighApp l (PExp l) (PExp l)+ | RightArrHighApp l (PExp l) (PExp l)+ deriving (Eq,Show)++data PFieldUpdate l+ = FieldUpdate l (QName l) (PExp l)+ | FieldPun l (Name l)+ | FieldWildcard l+ deriving (Eq,Show)++data ParseXAttr l = XAttr l (XName l) (PExp l)+ deriving (Eq,Show)++instance Annotated PExp where+ ann e = case e of+ Var l qn -> l+ IPVar l ipn -> l+ Con l qn -> l+ Lit l lit -> l+ InfixApp l e1 qop e2 -> l+ App l e1 e2 -> l+ NegApp l e -> l+ Lambda l ps e -> l+ Let l bs e -> l+ If l ec et ee -> l+ Case l e alts -> l+ Do l ss -> l+ MDo l ss -> l+ TupleSection l mes -> l+ List l es -> l+ Paren l e -> l+ RecConstr l qn fups -> l+ RecUpdate l e fups -> l+ EnumFrom l e -> l+ EnumFromTo l ef et -> l+ EnumFromThen l ef et -> l+ EnumFromThenTo l ef eth eto -> l+ ParComp l e qsss -> l+ ExpTypeSig l e t -> l+ VarQuote l qn -> l+ TypQuote l qn -> l+ BracketExp l br -> l+ SpliceExp l sp -> l+ QuasiQuote l sn se -> l++ XTag l xn xas me es -> l+ XETag l xn xas me -> l+ XPcdata l s -> l+ XExpTag l e -> l++ CorePragma l s e -> l+ SCCPragma l s e -> l+ GenPragma l s n12 n34 e -> l++ Proc l p e -> l+ LeftArrApp l e1 e2 -> l+ RightArrApp l e1 e2 -> l+ LeftArrHighApp l e1 e2 -> l+ RightArrHighApp l e1 e2 -> l++ amap f e = case e of+ Var l qn -> Var (f l) qn+ IPVar l ipn -> IPVar (f l) ipn+ Con l qn -> Con (f l) qn+ Lit l lit -> Lit (f l) lit+ InfixApp l e1 qop e2 -> InfixApp (f l) e1 qop e2+ App l e1 e2 -> App (f l) e1 e2+ NegApp l e -> NegApp (f l) e+ Lambda l ps e -> Lambda (f l) ps e+ Let l bs e -> Let (f l) bs e+ If l ec et ee -> If (f l) ec et ee+ Case l e alts -> Case (f l) e alts+ Do l ss -> Do (f l) ss+ MDo l ss -> MDo (f l) ss+ TupleSection l mes -> TupleSection (f l) mes+ List l es -> List (f l) es+ Paren l e -> Paren (f l) e+ RecConstr l qn fups -> RecConstr (f l) qn fups+ RecUpdate l e fups -> RecUpdate (f l) e fups+ EnumFrom l e -> EnumFrom (f l) e+ EnumFromTo l ef et -> EnumFromTo (f l) ef et+ EnumFromThen l ef et -> EnumFromThen (f l) ef et+ EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) ef eth eto+ ParComp l e qsss -> ParComp (f l) e qsss+ ExpTypeSig l e t -> ExpTypeSig (f l) e t+ VarQuote l qn -> VarQuote (f l) qn+ TypQuote l qn -> TypQuote (f l) qn+ BracketExp l br -> BracketExp (f l) br+ SpliceExp l sp -> SpliceExp (f l) sp+ QuasiQuote l sn se -> QuasiQuote (f l) sn se++ XTag l xn xas me es -> XTag (f l) xn xas me es+ XETag l xn xas me -> XETag (f l) xn xas me+ XPcdata l s -> XPcdata (f l) s+ XExpTag l e -> XExpTag (f l) e++ CorePragma l s e -> CorePragma (f l) s e+ SCCPragma l s e -> SCCPragma (f l) s e+ GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 e++ Proc l p e -> Proc (f l) p e+ LeftArrApp l e1 e2 -> LeftArrApp (f l) e1 e2+ RightArrApp l e1 e2 -> RightArrApp (f l) e1 e2+ LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) e1 e2+ RightArrHighApp l e1 e2 -> RightArrHighApp (f l) e1 e2+++instance Annotated PFieldUpdate where+ ann (FieldUpdate l qn e) = l+ ann (FieldPun l n) = l+ ann (FieldWildcard l) = l+ amap f (FieldUpdate l qn e) = FieldUpdate (f l) qn e+ amap f (FieldPun l n) = FieldPun (f l) n+ amap f (FieldWildcard l) = FieldWildcard (f l)++instance Annotated ParseXAttr where+ ann (XAttr l _ _) = l+ amap f (XAttr l xn e) = XAttr (f l) xn e++p_unit_con :: l -> PExp l+p_unit_con l = Con l (unit_con_name l)++p_tuple_con :: l -> Boxed -> Int -> PExp l+p_tuple_con l b i = Con l (tuple_con_name l b i)++p_unboxed_singleton_con :: l -> PExp l+p_unboxed_singleton_con l = Con l (unboxed_singleton_con_name l)++data PContext l = PContext l [PAsst l]+ deriving (Eq, Show)++instance Functor PContext where+ fmap f (PContext l assts) = PContext (f l) (map (fmap f) assts)++instance Annotated PContext where+ ann (PContext l _) = l+ amap f (PContext l assts) = PContext (f l) assts++data PType l+ = TyForall l+ (Maybe [TyVarBind l])+ (Maybe (PContext l))+ (PType l)+ | TyFun l (PType l) (PType l) -- ^ function type+ | TyTuple l Boxed [PType l] -- ^ tuple type, possibly boxed+ | TyList l (PType l) -- ^ list syntax, e.g. [a], as opposed to [] a+ | TyApp l (PType l) (PType l) -- ^ application of a type constructor+ | TyVar l (Name l) -- ^ type variable+ | TyCon l (QName l) -- ^ named type or type constructor+ | TyParen l (PType l) -- ^ type surrounded by parentheses+ | TyPred l (PAsst l) -- ^ assertion of an implicit parameter+ | TyInfix l (PType l) (QName l) (PType l) -- ^ infix type constructor+ | TyKind l (PType l) (Kind l) -- ^ type with explicit kind signature+ deriving (Eq, Show)++instance Functor PType where+ fmap f t = case t of+ TyForall l mtvs mcx t -> TyForall (f l) (fmap (map (fmap f)) mtvs) (fmap (fmap f) mcx) (fmap f t)+ TyFun l t1 t2 -> TyFun (f l) (fmap f t1) (fmap f t2)+ TyTuple l b ts -> TyTuple (f l) b (map (fmap f) ts)+ TyList l t -> TyList (f l) (fmap f t)+ TyApp l t1 t2 -> TyApp (f l) (fmap f t1) (fmap f t2)+ TyVar l n -> TyVar (f l) (fmap f n)+ TyCon l qn -> TyCon (f l) (fmap f qn)+ TyParen l t -> TyParen (f l) (fmap f t)+ TyPred l asst -> TyPred (f l) (fmap f asst)+ TyInfix l ta qn tb -> TyInfix (f l) (fmap f ta) (fmap f qn) (fmap f tb)+ TyKind l t k -> TyKind (f l) (fmap f t) (fmap f k)++instance Annotated PType where+ ann t = case t of+ TyForall l mtvs cx t -> l+ TyFun l t1 t2 -> l+ TyTuple l b ts -> l+ TyList l t -> l+ TyApp l t1 t2 -> l+ TyVar l n -> l+ TyCon l qn -> l+ TyParen l t -> l+ TyInfix l ta qn tb -> l+ TyKind l t k -> l+ amap f t = case t of+ TyForall l mtvs mcx t -> TyForall (f l) mtvs mcx t+ TyFun l t1 t2 -> TyFun (f l) t1 t2+ TyTuple l b ts -> TyTuple (f l) b ts+ TyList l t -> TyList (f l) t+ TyApp l t1 t2 -> TyApp (f l) t1 t2+ TyVar l n -> TyVar (f l) n+ TyCon l qn -> TyCon (f l) qn+ TyParen l t -> TyParen (f l) t+ TyInfix l ta qn tb -> TyInfix (f l) ta qn tb+ TyKind l t k -> TyKind (f l) t k++data PAsst l+ = ClassA l (QName l) [PType l]+ | InfixA l (PType l) (QName l) (PType l)+ | IParam l (IPName l) (PType l)+ | EqualP l (PType l) (PType l)+ deriving (Eq, Show)++instance Functor PAsst where+ fmap f asst = case asst of+ ClassA l qn ts -> ClassA (f l) (fmap f qn) (map (fmap f) ts)+ InfixA l ta qn tb -> InfixA (f l) (fmap f ta) (fmap f qn) (fmap f tb)+ IParam l ipn t -> IParam (f l) (fmap f ipn) (fmap f t)+ EqualP l t1 t2 -> EqualP (f l) (fmap f t1) (fmap f t2)++instance Annotated PAsst where+ ann asst = case asst of+ ClassA l qn ts -> l+ InfixA l ta qn tb -> l+ IParam l ipn t -> l+ EqualP l t1 t2 -> l+ amap f asst = case asst of+ ClassA l qn ts -> ClassA (f l) qn ts+ InfixA l ta qn tb -> InfixA (f l) ta qn tb+ IParam l ipn t -> IParam (f l) ipn t+ EqualP l t1 t2 -> EqualP (f l) t1 t2+++unit_tycon, fun_tycon, list_tycon, unboxed_singleton_tycon :: l -> PType l+unit_tycon l = TyCon l (unit_tycon_name l)+fun_tycon l = TyCon l (fun_tycon_name l)+list_tycon l = TyCon l (list_tycon_name l)+unboxed_singleton_tycon l = TyCon l (unboxed_singleton_tycon_name l)++tuple_tycon :: l -> Boxed -> Int -> PType l+tuple_tycon l b i = TyCon l (tuple_tycon_name l b i)
+ src/Language/Haskell/Exts/Annotated/Parser.ly view
@@ -0,0 +1,1796 @@+> {+> -----------------------------------------------------------------------------+> -- |+> -- Module : Language.Haskell.Exts.Parser+> -- Copyright : (c) Niklas Broberg 2004-2009,+> -- Original (c) Simon Marlow, Sven Panne 1997-2000+> -- License : BSD-style (see the file LICENSE.txt)+> --+> -- Maintainer : Niklas Broberg, d00nibro@chalmers.se+> -- Stability : stable+> -- Portability : portable+> --+> --+> -----------------------------------------------------------------------------+>+> module Language.Haskell.Exts.Annotated.Parser (+> -- * General parsing+> Parseable(..),+> ParseMode(..), defaultParseMode, ParseResult(..), fromParseResult,+> -- * Parsing of specific AST elements+> -- ** Modules+> parseModule, parseModuleWithMode, parseModuleWithComments,+> -- ** Expressions+> parseExp, parseExpWithMode, parseExpWithComments,+> -- ** Patterns+> parsePat, parsePatWithMode, parsePatWithComments,+> -- ** Declarations+> parseDecl, parseDeclWithMode, parseDeclWithComments,+> -- ** Types+> parseType, parseTypeWithMode, parseTypeWithComments,+> -- ** Option pragmas+> getTopPragmas+> ) where+>+> import Language.Haskell.Exts.Annotated.SrcLoc+> import Language.Haskell.Exts.Annotated.Syntax hiding ( Type(..), Exp(..), Asst(..), XAttr(..), FieldUpdate(..) )+> import Language.Haskell.Exts.Annotated.Syntax ( Type, Exp, Asst )+> import Language.Haskell.Exts.Annotated.ParseMonad+> import Language.Haskell.Exts.Annotated.Lexer+> import Language.Haskell.Exts.Annotated.ParseUtils+> import Language.Haskell.Exts.Annotated.Comments ( Comment )+> import Language.Haskell.Exts.Annotated.Fixity+> import Language.Haskell.Exts.Extension++> import Control.Monad ( liftM )+import Debug.Trace (trace)++> }++-----------------------------------------------------------------------------+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: 6 shift/reduce++2 for ambiguity in 'case x of y | let z = y in z :: Bool -> b' [State 12, 244]+ (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 ...' [State 712]+ 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.++1 for ambiguity using hybrid modules [State 116]+ For HSP pages that start with a <% %> block, the parser cannot tell whether+ to reduce a srcloc or shift the starting <%. Since any other body could not+ start with <%, shifting is the only sensible thing to do.++1 for ambiguity using toplevel xml modules [State 119]+ For HSP xml pages starting with a <, the parser cannot tell whether to shift+ that < or reduce an implicit 'open'. Since no other body could possibly start+ with <, shifting is the only sensible thing to do.++1 for ambiguity in '{-# RULES "name" [ ... #-}' [State 318]+ we don't know whether the '[' starts the activation or not: it+ might be the start of the declaration with the activation being+ empty. Resolving with shift means the declaration cannot start with '['.++-----------------------------------------------------------------------------++> %token+> VARID { Loc _ (VarId _) }+> QVARID { Loc _ (QVarId _) }+> IDUPID { Loc _ (IDupVarId _) } -- duplicable implicit parameter ?x+> ILINID { Loc _ (ILinVarId _) } -- linear implicit parameter %x+> CONID { Loc _ (ConId _) }+> QCONID { Loc _ (QConId _) }+> DVARID { Loc _ (DVarId _) } -- VARID containing dashes+> VARSYM { Loc _ (VarSym _) }+> CONSYM { Loc _ (ConSym _) }+> QVARSYM { Loc _ (QVarSym _) }+> QCONSYM { Loc _ (QConSym _) }+> INT { Loc _ (IntTok _) }+> RATIONAL { Loc _ (FloatTok _) }+> CHAR { Loc _ (Character _) }+> STRING { Loc _ (StringTok _) }++> PRIMINT { Loc _ (IntTokHash _) }+> PRIMWORD { Loc _ (WordTokHash _) }+> PRIMFLOAT { Loc _ (FloatTokHash _) }+> PRIMDOUBLE { Loc _ (DoubleTokHash _) }+> PRIMCHAR { Loc _ (CharacterHash _) }+> PRIMSTRING { Loc _ (StringHash _) }++Symbols++> '(' { Loc $$ LeftParen }+> ')' { Loc $$ RightParen }+> '(#' { Loc $$ LeftHashParen }+> '#)' { Loc $$ RightHashParen }+> '{|' { Loc $$ LeftCurlyBar }+> '|}' { Loc $$ RightCurlyBar }+> ';' { Loc $$ SemiColon }+> '{' { Loc $$ LeftCurly }+> '}' { Loc $$ RightCurly }+> vccurly { Loc $$ VRightCurly } -- a virtual close brace+> '[' { Loc $$ LeftSquare }+> ']' { Loc $$ RightSquare }+> ',' { Loc $$ Comma }+> '_' { Loc $$ Underscore }+> '`' { Loc $$ BackQuote }++Reserved operators++> '.' { Loc $$ Dot }+> '..' { Loc $$ DotDot }+> ':' { Loc $$ Colon }+> '::' { Loc $$ DoubleColon }+> '=' { Loc $$ Equals }+> '\\' { Loc $$ Backslash }+> '|' { Loc $$ Bar }+> '<-' { Loc $$ LeftArrow }+> '->' { Loc $$ RightArrow }+> '@' { Loc $$ At }+> '~' { Loc $$ Tilde }+> '=>' { Loc $$ DoubleArrow }+> '-' { Loc $$ Minus }+> '!' { Loc $$ Exclamation }+> '*' { Loc $$ Star }++Arrows++> '-<' { Loc $$ LeftArrowTail }+> '>-' { Loc $$ RightArrowTail }+> '-<<' { Loc $$ LeftDblArrowTail }+> '>>-' { Loc $$ RightDblArrowTail }++Harp++> '(|' { Loc $$ RPGuardOpen }+> '|)' { Loc $$ RPGuardClose }+> '@:' { Loc $$ RPCAt }++Template Haskell++> IDSPLICE { Loc _ (THIdEscape _) } -- $x+> '$(' { Loc $$ THParenEscape }+> '[|' { Loc $$ THExpQuote }+> '[p|' { Loc $$ THPatQuote }+> '[t|' { Loc $$ THTypQuote }+> '[d|' { Loc $$ THDecQuote }+> '|]' { Loc $$ THCloseQuote }+> VARQUOTE { Loc $$ THVarQuote } -- 'x+> TYPQUOTE { Loc $$ THTyQuote } -- ''T+> QUASIQUOTE { Loc _ (THQuasiQuote _) }++Hsx++> PCDATA { Loc _ (XPCDATA _) }+> '<' { Loc $$ XStdTagOpen }+> '</' { Loc $$ XCloseTagOpen }+> '<%' { Loc $$ XCodeTagOpen }+> '>' { Loc $$ XStdTagClose }+> '/>' { Loc $$ XEmptyTagClose }+> '%>' { Loc $$ XCodeTagClose }+> '<[' { Loc $$ XRPatOpen }+> ']>' { Loc $$ XRPatClose }++FFI++> 'foreign' { Loc $$ KW_Foreign }+> 'export' { Loc $$ KW_Export }+> 'safe' { Loc $$ KW_Safe }+> 'unsafe' { Loc $$ KW_Unsafe }+> 'threadsafe' { Loc $$ KW_Threadsafe }+> 'stdcall' { Loc $$ KW_StdCall }+> 'ccall' { Loc $$ KW_CCall }++Reserved Ids++> 'as' { Loc $$ KW_As }+> 'by' { Loc $$ KW_By } -- transform list comprehensions+> 'case' { Loc $$ KW_Case }+> 'class' { Loc $$ KW_Class }+> 'data' { Loc $$ KW_Data }+> 'default' { Loc $$ KW_Default }+> 'deriving' { Loc $$ KW_Deriving }+> 'do' { Loc $$ KW_Do }+> 'else' { Loc $$ KW_Else }+> 'family' { Loc $$ KW_Family } -- indexed type families+> 'forall' { Loc $$ KW_Forall } -- universal/existential qualification+> 'group' { Loc $$ KW_Group } -- transform list comprehensions+> 'hiding' { Loc $$ KW_Hiding }+> 'if' { Loc $$ KW_If }+> 'import' { Loc $$ KW_Import }+> 'in' { Loc $$ KW_In }+> 'infix' { Loc $$ KW_Infix }+> 'infixl' { Loc $$ KW_InfixL }+> 'infixr' { Loc $$ KW_InfixR }+> 'instance' { Loc $$ KW_Instance }+> 'let' { Loc $$ KW_Let }+> 'mdo' { Loc $$ KW_MDo }+> 'module' { Loc $$ KW_Module }+> 'newtype' { Loc $$ KW_NewType }+> 'of' { Loc $$ KW_Of }+> 'proc' { Loc $$ KW_Proc } -- arrows+> 'rec' { Loc $$ KW_Rec } -- arrows+> 'then' { Loc $$ KW_Then }+> 'type' { Loc $$ KW_Type }+> 'using' { Loc $$ KW_Using } -- transform list comprehensions+> 'where' { Loc $$ KW_Where }+> 'qualified' { Loc $$ KW_Qualified }++Pragmas++> '{-# INLINE' { Loc _ (INLINE _) }+> '{-# SPECIALISE' { Loc $$ SPECIALISE }+> '{-# SPECIALISE_INLINE' { Loc _ (SPECIALISE_INLINE _) }+> '{-# SOURCE' { Loc $$ SOURCE }+> '{-# RULES' { Loc $$ RULES }+> '{-# CORE' { Loc $$ CORE }+> '{-# SCC' { Loc $$ SCC }+> '{-# GENERATED' { Loc $$ GENERATED }+> '{-# DEPRECATED' { Loc $$ DEPRECATED }+> '{-# WARNING' { Loc $$ WARNING }+> '{-# UNPACK' { Loc $$ UNPACK }+> '{-# OPTIONS' { Loc _ (OPTIONS _) }+> '{-# CFILES' { Loc _ (CFILES _) }+> '{-# INCLUDE' { Loc _ (INCLUDE _) }+> '{-# LANGUAGE' { Loc $$ LANGUAGE }+> '#-}' { Loc $$ PragmaEnd }+++> %monad { P }+> %lexer { lexer } { Loc _ EOF }+> %error { parseError }+> %name mparseModule page+> %name mparseExp trueexp+> %name mparsePat pat+> %name mparseDecl topdecl+> %name mparseType truectype+> %partial mfindOptPragmas toppragmas+> %tokentype { Loc Token }+> %expect 6+> %%++-----------------------------------------------------------------------------+HSP Pages++Any HSP-specific parts requiring the XmlSyntax extension enabled will+be governed by the lexing, since all productions require at least one+special lexeme.++TODO: Yuck, this is messy, needs fixing in the AST!++> page :: { Module L }+> : toppragmas topxml {% checkPageModule $2 $1 }+> | toppragmas '<%' module '%>' topxml {% let (os,ss,l) = $1 in checkHybridModule $5 ($3 os ss l) $2 $4 }+> | toppragmas module { let (os,ss,l) = $1 in $2 os ss l }++> topxml :: { PExp L }+> : '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $2 $8;+> let { cn = reverse $6;+> as = reverse $3; };+> return $ XTag ($1 <^^> $9 <** [$1,$5,$7,$9]) n as $4 cn } }+> | '<' name attrs mattr '/>' { XETag ($1 <^^> $5 <** [$1,$5]) $2 (reverse $3) $4 }+++> toppragmas :: { ([OptionPragma L],[S],L) }+> : open toppragmasaux close { let (os,ss,ml) = $2 in (os,$1:ss++[$3],$1 <^^> $3) }++> toppragmasaux :: { ([OptionPragma L],[S],Maybe L) }+> : toppragma ';' toppragmasaux { let (os,ss,ml) = $3 in ($1 : os, $2 : ss, Just $ ann $1 <++> nIS $2 <+?> ml) }+> | {- nothing -} { ([],[],Nothing) }++TODO: the various pragma starts with content don't record where that content is located.++> toppragma :: { OptionPragma L }+> : '{-# LANGUAGE' conids optsemis '#-}' { LanguagePragma ($1 <^^> $4 <** ($1:reverse (snd $2) ++ reverse $3 ++ [$4])) (fst $2) }+> | '{-# INCLUDE' optsemis '#-}' { let Loc l (INCLUDE s) = $1 in IncludePragma (l <^^> $3 <** (l:reverse $2 ++ [$3])) s }+> | '{-# OPTIONS' optsemis '#-}' { let Loc l (OPTIONS (mc, s)) = $1+> in OptionsPragma (l <^^> $3 <** (l:reverse $2 ++ [$3])) (readTool mc) s }+> | '{-# CFILES' optsemis '#-}' { let Loc l (CFILES s) = $1+> in CFilesPragma (l <^^> $3 <** (l:reverse $2 ++ [$3])) s }++> conids :: { ([Name L],[S]) }+> : conid ',' conids { ($1 : fst $3, $2 : snd $3) }+> | conid { ([$1],[]) }++-----------------------------------------------------------------------------+Module Header++> module :: { [OptionPragma L] -> [S] -> L -> Module L }+> : optmodulehead body+> { let (is,ds,ss1,b,inf) = $2+> in \os ss l -> Module (l <++> inf <** (ss ++ ss1) <?? b) $1 os is ds }++> optmodulehead :: { Maybe (ModuleHead L) }+> : 'module' modid maybemodwarning maybeexports 'where' { Just $ ModuleHead ($1 <^^> $5 <** [$1,$5]) $2 $3 $4 }+> | {- empty -} { Nothing }++> maybemodwarning :: { Maybe (WarningText L) }+> : '{-# DEPRECATED' STRING '#-}' { let Loc l (StringTok s) = $2 in Just $ DeprText ($1 <^^> $3 <** [l,$3]) s }+> | '{-# WARNING' STRING '#-}' { let Loc l (StringTok s) = $2 in Just $ WarnText ($1 <^^> $3 <** [l,$3]) s }+> | {- empty -} { Nothing }++> body :: { ([ImportDecl L],[Decl L],[S],Bool,L) }+> : '{' bodyaux '}' { let (is,ds,ss) = $2 in (is,ds,$1:ss ++ [$3], True, $1 <^^> $3) }+> | open bodyaux close { let (is,ds,ss) = $2 in (is,ds,$1:ss ++ [$3], False, $1 <^^> $3) }++> bodyaux :: { ([ImportDecl L],[Decl L],[S]) }+> : optsemis impdecls semis topdecls { (reverse (fst $2), fst $4, reverse $1 ++ snd $2 ++ reverse $3 ++ snd $4) }+> | optsemis topdecls { ([], fst $2, reverse $1 ++ snd $2) }+> | optsemis impdecls optsemis { (reverse (fst $2), [], reverse $1 ++ snd $2 ++ reverse $3) }+> | optsemis { ([], [], reverse $1) }++> semis :: { [S] }+> : optsemis ';' { $2 : $1 }++> optsemis :: { [S] }+> : semis { $1 }+> | {- empty -} { [] }++-----------------------------------------------------------------------------+The Export List++> maybeexports :: { Maybe (ExportSpecList L) }+> : exports { Just $1 }+> | {- empty -} { Nothing }++> exports :: { ExportSpecList L }+> : '(' exportlist optcomma ')' { ExportSpecList ($1 <^^> $4 <** ($1:reverse (snd $2) ++ $3 ++ [$4])) (reverse (fst $2)) }+> | '(' optcomma ')' { ExportSpecList ($1 <^^> $3 <** ($1:$2++[$3])) [] }++> optcomma :: { [S] }+> : ',' { [$1] }+> | {- empty -} { [ ] }++> exportlist :: { ([ExportSpec L],[S]) }+> : exportlist ',' export { ($3 : fst $1, $2 : snd $1) }+> | export { ([$1],[]) }++> export :: { ExportSpec L }+> : qvar { EVar (ann $1) $1 }+> | qtyconorcls { EAbs (ann $1) $1 }+> | qtyconorcls '(' '..' ')' { EThingAll (ann $1 <++> nIS $4 <** [$2,$3,$4]) $1 }+> | qtyconorcls '(' ')' { EThingWith (ann $1 <++> nIS $3 <** [$2,$3]) $1 [] }+> | qtyconorcls '(' cnames ')' { EThingWith (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) $1 (reverse (fst $3)) }+> | 'module' modid { EModuleContents (nIS $1 <++> ann $2 <** [$1]) $2 }++-----------------------------------------------------------------------------+Import Declarations++> impdecls :: { ([ImportDecl L],[S]) }+> : impdecls semis impdecl { ($3 : fst $1, snd $1 ++ reverse $2) }+> | impdecl { ([$1],[]) }++> impdecl :: { ImportDecl L }+> : 'import' optsrc optqualified maybepkg modid maybeas maybeimpspec+> { let { (mmn,ss,ml) = $6 ;+> l = nIS $1 <++> ann $5 <+?> ml <+?> (fmap ann) $7 <** ($1:snd $2 ++ snd $3 ++ snd $4 ++ ss)}+> in ImportDecl l $5 (fst $3) (fst $2) (fst $4) mmn $7 }++> optsrc :: { (Bool,[S]) }+> : '{-# SOURCE' '#-}' { (True,[$1,$2]) }+> | {- empty -} { (False,[]) }++> optqualified :: { (Bool,[S]) }+> : 'qualified' { (True,[$1]) }+> | {- empty -} { (False, []) }++Requires the PackageImports extension enabled.+> maybepkg :: { (Maybe String,[S]) }+> : STRING {% do { checkEnabled PackageImports ;+> let { Loc l (StringTok s) = $1 } ;+> return $ (Just s,[l]) } }+> | {- empty -} { (Nothing,[]) }++> maybeas :: { (Maybe (ModuleName L),[S],Maybe L) }+> : 'as' modid { (Just $2,[$1],Just (nIS $1 <++> ann $2)) }+> | {- empty -} { (Nothing,[],Nothing) }+++> maybeimpspec :: { Maybe (ImportSpecList L) }+> : impspec { Just $1 }+> | {- empty -} { Nothing }++> impspec :: { ImportSpecList L }+> : opthiding '(' importlist optcomma ')' { let {(b,ml,s) = $1 ;+> l = (ml <?+> ($2 <^^> $5)) <** (s ++ $2:snd $3 ++ $4 ++ [$5])}+> in ImportSpecList l b (reverse (fst $3)) }+> | opthiding '(' optcomma ')' { let {(b,ml,s) = $1 ; l = (ml <?+> ($2 <^^> $4)) <** (s ++ $2:$3 ++ [$4])}+> in ImportSpecList l b [] }++> opthiding :: { (Bool, Maybe L,[S]) }+> : 'hiding' { (True,Just (nIS $1),[$1]) }+> | {- empty -} { (False,Nothing,[]) }++> importlist :: { ([ImportSpec L],[S]) }+> : importlist ',' importspec { ($3 : fst $1, $2 : snd $1) }+> | importspec { ([$1],[]) }++> importspec :: { ImportSpec L }+> : var { IVar (ann $1) $1 }+> | tyconorcls { IAbs (ann $1) $1 }+> | tyconorcls '(' '..' ')' { IThingAll (ann $1 <++> nIS $4 <** [$2,$3,$4]) $1 }+> | tyconorcls '(' ')' { IThingWith (ann $1 <++> nIS $3 <** [$2,$3]) $1 [] }+> | tyconorcls '(' cnames ')' { IThingWith (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) $1 (reverse (fst $3)) }++> cnames :: { ([CName L],[S]) }+> : cnames ',' cname { ($3 : fst $1, $2 : snd $1) }+> | cname { ([$1],[]) }++> cname :: { CName L }+> : var { VarName (ann $1) $1 }+> | con { ConName (ann $1) $1 }++-----------------------------------------------------------------------------+Fixity Declarations++> fixdecl :: { Decl L }+> : infix prec ops { let (ops,ss,l) = $3+> in InfixDecl (ann $1 <++> l <** (snd $2 ++ reverse ss)) $1 (fst $2) (reverse ops) }++> prec :: { (Maybe Int, [S]) }+> : {- empty -} { (Nothing, []) }+> | INT {% let Loc l (IntTok i) = $1 in checkPrec i >>= \i -> return (Just i, [l]) }++> infix :: { Assoc L }+> : 'infix' { AssocNone $ nIS $1 }+> | 'infixl' { AssocLeft $ nIS $1 }+> | 'infixr' { AssocRight $ nIS $1 }++> ops :: { ([Op L],[S],L) }+> : ops ',' op { let (ops,ss,l) = $1 in ($3 : ops, $2 : ss, l <++> ann $3) }+> | op { ([$1],[],ann $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 :: { ([Decl L],[S]) }+> : topdecls1 optsemis {% checkRevDecls (fst $1) >>= \ds -> return (ds, snd $1 ++ reverse $2) }++> topdecls1 :: { ([Decl L],[S]) }+> : topdecls1 semis topdecl { ($3 : fst $1, snd $1 ++ reverse $2) }+> | topdecl { ([$1],[]) }++> topdecl :: { Decl L }+> : 'type' dtype '=' truectype+> {% do { (c,ts) <- checkSimpleType $2;+> let {l = nIS $1 <++> ann $4 <** [$1,$3]};+> return (TypeDecl l c ts $4) } }++Requires the TypeFamilies extension enabled, but the lexer will handle+that through the 'family' keyword.+> | 'type' 'family' type optkind+> {% do { (c,ts) <- checkSimpleType $3;+> let {l = nIS $1 <++> ann $3 <+?> (fmap ann) (fst $4) <** ($1:$2:snd $4)};+> return (TypeFamDecl l c ts (fst $4)) } }++Here there is no special keyword so we must do the check.+> | 'type' 'instance' truedtype '=' truectype+> {% do { -- no checkSimpleType $4 since dtype may contain type patterns+> checkEnabled TypeFamilies ;+> let {l = nIS $1 <++> ann $5 <** [$1,$2,$4]};+> return (TypeInsDecl l $3 $5) } }+> | data_or_newtype ctype constrs0 deriving+> {% do { (cs,c,t) <- checkDataHeader $2;+> let { (qds,ss1,minf1) = $3; (mders,ss2,minf2) = $4 ;+> l = $1 <> $2 <+?> minf1 <+?> minf2 <** (ss1 ++ ss2)};+> checkDataOrNew $1 qds;+> return (DataDecl l $1 cs c t (reverse qds) mders) } }++Requires the GADTs extension enabled, handled in gadtlist.+> | data_or_newtype ctype optkind 'where' gadtlist deriving+> {% do { (cs,c,t) <- checkDataHeader $2;+> let { (gs,ss1,inf,b) = $5; (ds,ss2,minf) = $6 ;+> l = ann $1 <++> inf <+?> minf <** (snd $3 ++ ($4:ss1 ++ ss2)) <?? b};+> checkDataOrNew $1 gs;+> return (GDataDecl l $1 cs c t (fst $3) (reverse gs) ds) } }++Same as above, lexer will handle it through the 'family' keyword.+> | 'data' 'family' ctype optkind+> {% do { (cs,c,t) <- checkDataHeader $3;+> let {l = nIS $1 <++> ann $3 <+?> (fmap ann) (fst $4) <** ($1:$2:snd $4)};+> return (DataFamDecl l cs c t (fst $4)) } }++Here we must check for TypeFamilies.+> | data_or_newtype 'instance' truectype constrs0 deriving+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> checkEnabled TypeFamilies ;+> let { (qds,ss1,minf1) = $4 ; (mders,ss2,minf2) = $5 ;+> l = $1 <> $3 <+?> minf1 <+?> minf2 <** ($2:ss1 ++ ss2) };+> checkDataOrNew $1 qds;+> return (DataInsDecl l $1 $3 (reverse qds) mders) } }++This style requires both TypeFamilies and GADTs, the latter is handled in gadtlist.+> | data_or_newtype 'instance' truectype optkind 'where' gadtlist deriving+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> checkEnabled TypeFamilies ;+> let {(gs,ss1,inf,b) = $6; (ds,ss2,minf) = $7 ;+> l = ann $1 <++> inf <+?> minf <** ($2:snd $4 ++ ($5:ss1 ++ ss2)) <?? b};+> checkDataOrNew $1 gs;+> return (GDataInsDecl l $1 $3 (fst $4) (reverse gs) ds) } }+> | 'class' ctype fds optcbody+> {% do { (cs,c,vs) <- checkClassHeader $2;+> let {(fds,ss1,minf1) = $3;(mcs,ss2,minf2,b) = $4} ;+> let { l = nIS $1 <++> ann $2 <+?> minf1 <+?> minf2 <** ($1:ss1 ++ ss2) <?? b} ;+> return (ClassDecl l cs c vs fds mcs) } }+> | 'instance' ctype optvaldefs+> {% do { (cs,c,ts) <- checkInstHeader $2;+> let {(mis,ss,minf,b) = $3};+> return (InstDecl (nIS $1 <++> ann $2 <+?> minf <** ($1:ss) <?? b) cs c ts mis) } }++Requires the StandaloneDeriving extension enabled.+> | 'deriving' 'instance' ctype+> {% do { checkEnabled StandaloneDeriving ;+> (cs, c, ts) <- checkInstHeader $3;+> let {l = nIS $1 <++> ann $3 <** [$1,$2]};+> return (DerivDecl l cs c ts) } }+> | 'default' '(' typelist ')'+> { DefaultDecl ($1 <^^> $4 <** ($1:$2 : snd $3 ++ [$4])) (fst $3) }++Requires the TemplateHaskell extension, but the lexer will handle that+through the '$(' lexeme.+> | '$(' trueexp ')' { let l = $1 <^^> $3 <** [$1,$3] in SpliceDecl l $ ParenSplice l $2 }++These require the ForeignFunctionInterface extension, handled by the+lexer through the 'foreign' (and 'export') keyword.+> | 'foreign' 'import' callconv safety fspec+> { let (s,n,t,ss) = $5 in ForImp (nIS $1 <++> ann t <** ($1:$2:ss)) $3 $4 s n t }+> | 'foreign' 'export' callconv fspec+> { let (s,n,t,ss) = $4 in ForExp (nIS $1 <++> ann t <** ($1:$2:ss)) $3 s n t }++> | '{-# RULES' rules '#-}' { RulePragmaDecl ($1 <^^> $3 <** [$1,$3]) $ reverse $2 }+> | '{-# DEPRECATED' warndeprs '#-}' { DeprPragmaDecl ($1 <^^> $3 <** ($1:snd $2++[$3])) $ reverse (fst $2) }+> | '{-# WARNING' warndeprs '#-}' { WarnPragmaDecl ($1 <^^> $3 <** ($1:snd $2++[$3])) $ reverse (fst $2) }+> | decl { $1 }++> data_or_newtype :: { DataOrNew L }+> : 'data' { DataType $ nIS $1 }+> | 'newtype' { NewType $ nIS $1 }++> typelist :: { ([Type L],[S]) }+> : types {% do { ts <- mapM checkType (fst $1);+> return $ (reverse ts, reverse (snd $1)) } }+> | truetype { ([$1],[]) }+> | {- empty -} { ([],[]) }++> decls :: { ([Decl L],[S]) }+> : optsemis decls1 optsemis {% checkRevDecls (fst $2) >>= \ds -> return (ds, reverse $1 ++ snd $2 ++ reverse $3) }+> | optsemis { ([],reverse $1) }++> decls1 :: { ([Decl L],[S]) }+> : decls1 semis decl { ($3 : fst $1, snd $1 ++ reverse $2) }+> | decl { ([$1],[]) }++> decl :: { Decl L }+> : signdecl { $1 }+> | fixdecl { $1 }+> | valdef { $1 }++> decllist :: { Binds L }+> : '{' decls '}' { BDecls ($1 <^^> $3 <** ($1:snd $2++[$3]) <?? True ) (fst $2) }+> | open decls close { BDecls ($1 <^^> $3 <** ($1:snd $2++[$3]) <?? False) (fst $2) }++> signdecl :: { Decl L }+> : exp0b '::' truectype {% do { v <- checkSigVar $1;+> return $ TypeSig ($1 <> $3 <** [$2]) [v] $3 } }+> | exp0b ',' vars '::' truectype {% do { v <- checkSigVar $1;+> let {(vs,ss,_) = $3 ; l = $1 <> $5 <** ($2 : reverse ss ++ [$4]) } ;+> return $ TypeSig l (v : reverse vs) $5 } }+> | '{-# INLINE' activation qvar '#-}' { let Loc l (INLINE s) = $1 in InlineSig (l <^^> $4 <** [l,$4]) s $2 $3 }+> | '{-# SPECIALISE' qvar '::' sigtypes '#-}' { SpecSig ($1 <^^> $5 <** ($1:$3 : snd $4 ++ [$5])) $2 (fst $4) }+> | '{-# SPECIALISE_INLINE' activation qvar '::' sigtypes '#-}'+> { let Loc l (SPECIALISE_INLINE s) = $1+> in SpecInlineSig (l <^^> $6 <** (l:$4:snd $5++[$6])) s $2 $3 (fst $5) }+> | '{-# SPECIALISE' 'instance' ctype '#-}' {% do { (cs,c,ts) <- checkInstHeader $3;+> let {l = $1 <^^> $4 <** [$1,$2,$4]};+> return $ InstSig l cs c ts } }++> sigtypes :: { ([Type L],[S]) }+> : sigtype { ([$1],[]) }+> | sigtype ',' sigtypes { ($1 : fst $3, $2 : snd $3) }++> sigtype :: { Type L }+> : ctype {% checkType $ mkTyForall (ann $1) Nothing Nothing $1 }++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 :: { Binds L }+> : decllist { $1 }+> | '{' ipbinds '}' { IPBinds ($1 <^^> $3 <** snd $2 <?? True ) (fst $2) }+> | open ipbinds close { IPBinds ($1 <^^> $3 <** snd $2 <?? False) (fst $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 :: { ([Name L],[S],L) }+> : vars ',' var { let (ns,ss,l) = $1 in ($3 : ns, $2 : ss, l <++> ann $3) }+> | qvar {% do { n <- checkUnQual $1;+> return ([n],[],ann n) } }++-----------------------------------------------------------------------------+FFI++These will only be called on in the presence of a 'foreign' keyword,+so no need to check for extensions.++> callconv :: { CallConv L }+> : 'stdcall' { StdCall (nIS $1) }+> | 'ccall' { CCall (nIS $1) }++> safety :: { Maybe (Safety L) }+> : 'safe' { Just $ PlaySafe (nIS $1) False }+> | 'unsafe' { Just $ PlayRisky (nIS $1) }+> | 'threadsafe' { Just $ PlaySafe (nIS $1) True }+> | {- empty -} { Nothing }++> fspec :: { (String, Name L, Type L, [S]) }+> : STRING var_no_safety '::' truedtype { let Loc l (StringTok s) = $1 in (s, $2, $4, [l,$3]) }+> | var_no_safety '::' truedtype { ("", $1, $3, [$2]) }++-----------------------------------------------------------------------------+Pragmas++> rules :: { [Rule L] }+> : rules ';'rule { $3 : $1 }+> | rules ';' { $1 }+> | rule { [$1] }+> | {- empty -} { [] }++> rule :: { Rule L }+> : STRING activation ruleforall exp0 '=' trueexp {% do { let {Loc l (StringTok s) = $1};+> e <- checkRuleExpr $4;+> return $ Rule (nIS l <++> ann $6 <** snd $3 ++ [$5]) s $2 (fst $3) e $6 } }++> activation :: { Maybe (Activation L) }+> : {- empty -} { Nothing }+> | '[' INT ']' { let Loc l (IntTok i) = $2 in Just $ ActiveFrom ($1 <^^> $3 <** [$1,l,$3]) (fromInteger i) }+> | '[' '~' INT ']' { let Loc l (IntTok i) = $3 in Just $ ActiveUntil ($1 <^^> $4 <** [$1,$2,l,$4]) (fromInteger i) }++> ruleforall :: { (Maybe [RuleVar L],[S]) }+> : {- empty -} { (Nothing,[]) }+> | 'forall' rulevars '.' { (Just $2,[$1,$3]) }++> rulevars :: { [RuleVar L] }+> : rulevar { [$1] }+> | rulevar rulevars { $1 : $2 }++> rulevar :: { RuleVar L }+> : varid { RuleVar (ann $1) $1 }+> | '(' varid '::' truectype ')' { TypedRuleVar ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }++> warndeprs :: { ([([Name L],String)],[S]) }+> : warndeprs ';' warndepr { (fst $3 : fst $1, snd $1 ++ ($2:snd $3)) }+> | warndeprs ';' { (fst $1, snd $1 ++ [$2]) }+> | warndepr { ([fst $1],snd $1) }+> | {- empty -} { ([],[]) }++> warndepr :: { (([Name L], String),[S]) }+> : namevars STRING { let Loc l (StringTok s) = $2 in ((fst $1,s),snd $1 ++ [l]) }++> namevars :: { ([Name L],[S]) }+> : namevar { ([$1],[]) }+> | namevar ',' namevars { ($1 : fst $3, $2 : snd $3) }++> namevar :: { Name L }+> : con { $1 }+> | var { $1 }++-----------------------------------------------------------------------------+Types++Type equality contraints need the TypeFamilies extension.++> truedtype :: { Type L }+> : dtype {% checkType $1 }++> dtype :: { PType L }+> : btype { $1 }+> | btype qtyconop dtype { TyInfix ($1 <> $3) $1 $2 $3 }+> | btype qtyvarop dtype { TyInfix ($1 <> $3) $1 $2 $3 } -- FIXME+> | btype '->' ctype { TyFun ($1 <> $3 <** [$2]) $1 $3 }+> | btype '~' btype {% do { checkEnabled TypeFamilies ;+> let {l = $1 <> $3 <** [$2]};+> return $ TyPred l $ EqualP l $1 $3 } }++Implicit parameters can occur in normal types, as well as in contexts.++> truetype :: { Type L }+> : type {% checkType $1 }++> type :: { PType L }+> : ivar '::' dtype { let l = ($1 <> $3 <** [$2]) in TyPred l $ IParam l $1 $3 }+> | dtype { $1 }++> truebtype :: { Type L }+> : btype {% checkType $1 }++> btype :: { PType L }+> : btype atype { TyApp ($1 <> $2) $1 $2 }+> | atype { $1 }++UnboxedTuples requires the extension, but that will be handled through+the (# and #) lexemes. Kinds will be handled at the kind rule.++> trueatype :: { Type L }+> : atype {% checkType $1 }++> atype :: { PType L }+> : gtycon { TyCon (ann $1) $1 }+> | tyvar { TyVar (ann $1) $1 }+> | '(' types ')' { TyTuple ($1 <^^> $3 <** ($1:reverse ($3:snd $2))) Boxed (reverse (fst $2)) }+> | '(#' types1 '#)' { TyTuple ($1 <^^> $3 <** ($1:reverse ($3:snd $2))) Unboxed (reverse (fst $2)) }+> | '[' type ']' { TyList ($1 <^^> $3 <** [$1,$3]) $2 }+> | '(' ctype ')' { TyParen ($1 <^^> $3 <** [$1,$3]) $2 }+> | '(' ctype '::' kind ')' { TyKind ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }++> gtycon :: { QName L }+> : otycon { $1 }+> | '(' ')' { unit_tycon_name ($1 <^^> $2 <** [$1,$2]) }+> | '(' '->' ')' { fun_tycon_name ($1 <^^> $3 <** [$1,$2,$3]) }+> | '[' ']' { list_tycon_name ($1 <^^> $2 <** [$1,$2]) }+> | '(' commas ')' { tuple_tycon_name ($1 <^^> $3 <** ($1:reverse $2 ++ [$3])) Boxed (length $2) }+> | '(#' '#)' { unboxed_singleton_tycon_name ($1 <^^> $2 <** [$1,$2]) }+> | '(#' commas '#)' { tuple_tycon_name ($1 <^^> $3 <** ($1:reverse $2 ++ [$3])) Unboxed (length $2) }++> otycon :: { QName L }+> : qconid { $1 }+> | '(' gconsym ')' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++These are for infix types++> qtyconop :: { QName L }+> : 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!++Forall-quantified types require some extension to enable them, which+is any of the keyword-enabling ones, except ExistentialQuantification.++> truectype :: { Type L }+> : ctype {% checkType $1 }++> ctype :: { PType L }+> : 'forall' ktyvars '.' ctype { TyForall (nIS $1 <++> ann $4 <** [$1,$3]) (Just (reverse (fst $2))) Nothing $4 }+> | context '=>' ctype { TyForall ($1 <> $3) Nothing (Just $1) $3 }+> | type { $1 }++Equality constraints require the TypeFamilies extension.++> context :: { PContext L }+> : btype {% checkPContext $1 }+> | btype '~' btype {% do { checkEnabled TypeFamilies;+> let {l = $1 <> $3 <** [$2]};+> checkPContext (TyPred l $ EqualP l $1 $3) } }++> types :: { ([PType L],[S]) }+> : types1 ',' ctype { ($3 : fst $1, $2 : snd $1) }++> types1 :: { ([PType L],[S]) }+> : ctype { ([$1],[]) }+> | types1 ',' ctype { ($3 : fst $1, $2 : snd $1) }++> ktyvars :: { ([TyVarBind L],Maybe L) }+> : ktyvars ktyvar { ($2 : fst $1, Just (snd $1 <?+> ann $2)) }+> | {- empty -} { ([],Nothing) }++> ktyvar :: { TyVarBind L }+> : tyvar { UnkindedVar (ann $1) $1 }+> | '(' tyvar '::' kind ')' { KindedVar ($1 <^^> $5 <** [$1,$3,$5]) $2 $4 }++> tyvars :: { ([Name L],Maybe L) }+> : tyvars tyvar { ($2 : fst $1, Just (snd $1 <?+> ann $2)) }+> | {- empty -} { ([], Nothing) }++> tyvars1 :: { ([Name L],L) }+> : tyvars tyvar { ($2 : fst $1, snd $1 <?+> ann $2) }+++-----------------------------------------------------------------------------+Functional Dependencies++These require the FunctionalDependencies extension to be enabled.++> fds :: { ([FunDep L],[S],Maybe L) }+> : {- empty -} { ([],[], Nothing) }+> | '|' fds1 {% do { checkEnabled FunctionalDependencies ;+> let {(fds,ss,l) = $2} ;+> return (reverse fds, $1 : reverse ss, Just (nIS $1 <++> l)) } }++> fds1 :: { ([FunDep L],[S],L) }+> : fds1 ',' fd { let (fds,ss,l) = $1 in ($3 : fds, $2 : ss, l <++> ann $3) }+> | fd { ([$1],[],ann $1) }++> fd :: { FunDep L }+> : tyvars1 '->' tyvars1 { FunDep (snd $1 <++> snd $3 <** [$2]) (reverse (fst $1)) (reverse (fst $3)) }++-----------------------------------------------------------------------------+Datatype declarations++GADTs - require the GADTs extension enabled, but we handle that at the calling site.++> gadtlist :: { ([GadtDecl L],[S],L,Bool) }+> : gadtlist1 {% checkEnabled GADTs >> return $1 }++> gadtlist1 :: { ([GadtDecl L],[S],L,Bool) }+> : '{' gadtconstrs1 '}' { (fst $2, $1 : snd $2 ++ [$3], $1 <^^> $3,True) }+> | open gadtconstrs1 close { (fst $2, $1 : snd $2 ++ [$3], $1 <^^> $3,False) }++> gadtconstrs1 :: { ([GadtDecl L],[S]) }+> : optsemis gadtconstrs optsemis { (fst $2, reverse $1 ++ snd $2 ++ reverse $3) }++> gadtconstrs :: { ([GadtDecl L],[S]) }+> : gadtconstrs semis gadtconstr { ($3 : fst $1, snd $1 ++ reverse $2) }+> | gadtconstr { ([$1],[]) }++> gadtconstr :: { GadtDecl L }+> : qcon '::' truectype {% do { c <- checkUnQual $1;+> return $ GadtDecl ($1 <> $3 <** [$2]) c $3 } }++To allow the empty case we need the EmptyDataDecls extension.+> constrs0 :: { ([QualConDecl L],[S],Maybe L) }+> : {- empty -} {% checkEnabled EmptyDataDecls >> return ([],[],Nothing) }+> | '=' constrs { let (ds,ss,l) = $2 in (ds, $1 : reverse ss, Just $ nIS $1 <++> l) }++> constrs :: { ([QualConDecl L],[S],L) }+> : constrs '|' constr { let (ds,ss,l) = $1 in ($3 : ds, $2 : ss, l <++> ann $3) }+> | constr { ([$1],[],ann $1) }++> constr :: { QualConDecl L }+> : forall context '=>' constr1 {% do { checkEnabled ExistentialQuantification ;+> ctxt <- checkContext (Just $2) ;+> let {(mtvs,ss,ml) = $1} ;+> return $ QualConDecl (ml <?+> ann $4 <** (ss ++ [$3])) mtvs ctxt $4 } }+> | forall constr1 { let (mtvs, ss, ml) = $1 in QualConDecl (ml <?+> ann $2 <** ss) mtvs Nothing $2 }++> forall :: { (Maybe [TyVarBind L], [S], Maybe L) }+> : 'forall' ktyvars '.' {% checkEnabled ExistentialQuantification >> return (Just (fst $2), [$1,$3], Just $ $1 <^^> $3) }+> | {- empty -} { (Nothing, [], Nothing) }++To avoid conflicts when introducing type operators, we need to parse record constructors+as qcon and then check separately that they are truly unqualified.++> constr1 :: { ConDecl L }+> : scontype { let (n,ts,l) = $1 in ConDecl l n ts }+> | sbtype conop sbtype { InfixConDecl ($1 <> $3) $1 $2 $3 }+> | qcon '{' '}' {% do { c <- checkUnQual $1; return $ RecDecl (ann $1 <++> nIS $3 <** [$2,$3]) c [] } }+> | qcon '{' fielddecls '}' {% do { c <- checkUnQual $1;+> return $ RecDecl (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4])) c (reverse (fst $3)) } }++> scontype :: { (Name L, [BangType L], L) }+> : btype {% do { (c,ts) <- splitTyConApp $1;+> return (c,map (\t -> UnBangedTy (ann t) t) ts,ann $1) } }+> | scontype1 { $1 }++> scontype1 :: { (Name L, [BangType L],L) }+> : btype '!' trueatype {% do { (c,ts) <- splitTyConApp $1;+> return (c,map (\t -> UnBangedTy (ann t) t) ts+++> [BangedTy (nIS $2 <++> ann $3) $3], $1 <> $3) } }+> | btype '{-# UNPACK' '#-}' '!' trueatype {% do { (c,ts) <- splitTyConApp $1;+> return (c,map (\t -> UnBangedTy (ann t) t) ts+++> [UnpackedTy (nIS $2 <++> ann $5 <** [$3,$4]) $5], $1 <> $5) } }+> | scontype1 satype { let (n,ts,l) = $1 in (n, ts ++ [$2],l <++> ann $2) }++> satype :: { BangType L }+> : trueatype { UnBangedTy (ann $1) $1 }+> | '!' trueatype { BangedTy (nIS $1 <++> ann $2 <** [$1]) $2 }+> | '{-# UNPACK' '#-}' '!' trueatype { UnpackedTy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }++> sbtype :: { BangType L }+> : truebtype { UnBangedTy (ann $1) $1 }+> | '!' trueatype { BangedTy (nIS $1 <++> ann $2 <** [$1]) $2 }+> | '{-# UNPACK' '#-}' '!' trueatype { UnpackedTy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }++> fielddecls :: { ([FieldDecl L],[S]) }+> : fielddecls ',' fielddecl { ($3 : fst $1, $2 : snd $1) }+> | fielddecl { ([$1],[]) }++> fielddecl :: { FieldDecl L }+> : vars '::' stype { let (ns,ss,l) = $1 in FieldDecl (l <++> ann $3 <** (reverse ss ++ [$2])) (reverse ns) $3 }++> stype :: { BangType L }+> : truectype { UnBangedTy (ann $1) $1 }+> | '!' trueatype { BangedTy (nIS $1 <++> ann $2 <** [$1]) $2 }+> | '{-# UNPACK' '#-}' '!' trueatype { UnpackedTy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }++> deriving :: { (Maybe [Deriving L],[S],Maybe L) }+> : {- empty -} { (Nothing,[],Nothing) }+> | 'deriving' qtycls1 { let l = nIS $1 <++> ann $2 in (Just [Deriving l $2 []], [$1], Just l) }+> | 'deriving' '(' ')' { (Just [], [$1,$2,$3], Just $ $1 <^^> $3) }+> | 'deriving' '(' dclasses ')' { (Just $ reverse (fst $3), $1:$2:snd $3 ++ [$4], Just $ $1 <^^> $4) }++> dclasses :: { ([Deriving L],[S]) }+> : types1 {% checkDeriving (fst $1) >>= \ds -> return (ds, snd $1) }++> qtycls1 :: { QName L }+> : qconid { $1 }+++-----------------------------------------------------------------------------+Kinds++> kind :: { Kind L }+> : kind1 {% checkEnabled KindSignatures >> return $1 }++> kind1 :: { Kind L }+> : akind { $1 }+> | akind '->' kind1 { KindFn ($1 <> $3 <** [$2]) $1 $3 }++> akind :: { Kind L }+> : '*' { KindStar (nIS $1) }+> | '!' { KindBang (nIS $1) }+> | '(' kind1 ')' { KindParen ($1 <^^> $3 <** [$1,$3]) $2 }++> optkind :: { (Maybe (Kind L), [S]) }+> : {-empty-} { (Nothing,[]) }+> | '::' kind { (Just $2,[$1]) }+-----------------------------------------------------------------------------+Class declarations++TODO: Lots of stuff to pass around here.++No implicit parameters in the where clause of a class declaration.+> optcbody :: { (Maybe [ClassDecl L],[S],Maybe L,Bool) }+> : 'where' '{' cldecls '}' {% checkClassBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4),True) }+> | 'where' open cldecls close {% checkClassBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4),False) }+> | {- empty -} { (Nothing,[],Nothing,False) }++> cldecls :: { ([ClassDecl L],[S]) }+> : optsemis cldecls1 optsemis {% checkRevClsDecls (fst $2) >>= \cs -> return (cs, reverse $1 ++ snd $2 ++ reverse $3) }+> | optsemis { ([],reverse $1) }++> cldecls1 :: { ([ClassDecl L],[S]) }+> : cldecls1 semis cldecl { ($3 : fst $1, snd $1 ++ reverse $2) }+> | cldecl { ([$1],[]) }++Associated types require the TypeFamilies extension.++> cldecl :: { ClassDecl L }+> : decl { ClsDecl (ann $1) $1 }+> | atdecl {% checkEnabled TypeFamilies >> return $1 }++> atdecl :: { ClassDecl L }+> : 'type' type optkind+> {% do { (c,ts) <- checkSimpleType $2;+> return (ClsTyFam (nIS $1 <++> ann $2 <+?> (fmap ann) (fst $3) <** $1:snd $3) c ts (fst $3)) } }+> | 'type' truedtype '=' truectype+> { ClsTyDef (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }+> | 'data' ctype optkind+> {% do { (cs,c,t) <- checkDataHeader $2;+> return (ClsDataFam (nIS $1 <++> ann $2 <+?> (fmap ann) (fst $3) <** $1:snd $3) cs c t (fst $3)) } }++-----------------------------------------------------------------------------+Instance declarations++> optvaldefs :: { (Maybe [InstDecl L],[S],Maybe L,Bool) }+> : 'where' '{' valdefs '}' {% checkInstBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4),True) }+> | 'where' open valdefs close {% checkInstBody (fst $3) >>= \vs -> return (Just vs, $1:$2: snd $3 ++ [$4], Just ($1 <^^> $4),False) }+> | {- empty -} { (Nothing, [], Nothing, False) }++> valdefs :: { ([InstDecl L],[S]) }+> : optsemis valdefs1 optsemis {% checkRevInstDecls (fst $2) >>= \is -> return (is, reverse $1 ++ snd $2 ++ reverse $3) }+> | optsemis { ([],reverse $1) }++> valdefs1 :: { ([InstDecl L],[S]) }+> : valdefs1 semis insvaldef { ($3 : fst $1, snd $1 ++ reverse $2) }+> | insvaldef { ([$1],[]) }++Associated types require the TypeFamilies extension enabled.++> insvaldef :: { InstDecl L }+> : valdef { InsDecl (ann $1) $1 }+> | atinst {% checkEnabled TypeFamilies >> return $1 }+> | inlinst { $1 }++> inlinst :: { InstDecl L }+> : '{-# INLINE' activation qvar '#-}' { let Loc l (INLINE s) = $1 in InsInline (l <^^> $4 <** [l,$4]) s $2 $3 }++> atinst :: { InstDecl L }+> : 'type' truedtype '=' truectype+> {% do { -- no checkSimpleType $4 since dtype may contain type patterns+> return (InsType (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4) } }+> | data_or_newtype truectype constrs0 deriving+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> let {(ds,ss1,minf1) = $3 ; (mds,ss2,minf2) = $4};+> checkDataOrNew $1 ds;+> return (InsData ($1 <> $2 <+?> minf1 <+?> minf2 <** (ss1 ++ ss2)) $1 $2 (reverse ds) mds) } }+> | data_or_newtype truectype optkind 'where' gadtlist deriving+> {% do { -- (cs,c,t) <- checkDataHeader $4;+> let { (gs,ss1,inf,b) = $5 ; (mds,ss2,minf) = $6 } ;+> checkDataOrNew $1 gs;+> return $ InsGData (ann $1 <++> inf <+?> minf <** (snd $3 ++ $4:ss1 ++ ss2) <?? b) $1 $2 (fst $3) (reverse gs) mds } }++-----------------------------------------------------------------------------+Value definitions++> valdef :: { Decl L }+> : exp0b optsig rhs optwhere {% checkValDef (($1 <> $3 <+?> (fmap ann) (fst $4)) <** (snd $2 ++ snd $4)) $1 (fst $2) $3 (fst $4) }+> | '!' aexp rhs optwhere {% do { checkEnabled BangPatterns ;+> p <- checkPattern $2;+> return $ PatBind ((nIS $1 <++> ann $3 <+?> (fmap ann) (fst $4)) <** $1:snd $4)+> p Nothing $3 (fst $4) } }++May bind implicit parameters+> optwhere :: { (Maybe (Binds L),[S]) }+> : 'where' binds { (Just $2, [$1]) }+> | {- empty -} { (Nothing, []) }++Type signatures on value definitions require ScopedTypeVariables (or PatternSignatures, which is deprecated).++> optsig :: { (Maybe (Type L),[S]) }+> : '::' truectype {% checkEnabled ScopedTypeVariables >> return (Just $2, [$1]) }+> | {- empty -} { (Nothing,[]) }++> rhs :: { Rhs L }+> : '=' trueexp { UnGuardedRhs (nIS $1 <++> ann $2 <** [$1]) $2 }+> | gdrhs { GuardedRhss (snd $1) (reverse $ fst $1) }++> gdrhs :: { ([GuardedRhs L],L) }+> : gdrhs gdrh { ($2 : fst $1, snd $1 <++> ann $2) }+> | gdrh { ([$1],ann $1) }++Guards may contain patterns if PatternGuards is enabled, hence quals instead of exp.+> gdrh :: { GuardedRhs L }+> : '|' quals '=' trueexp {% do { checkPatternGuards (fst $2);+> return $ GuardedRhs (nIS $1 <++> ann $4 <** ($1:snd $2 ++ [$3])) (reverse (fst $2)) $4 } }++-----------------------------------------------------------------------------+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).++Ugly: We need non-parenthesized post-operators for HaRP, and to parse both+these and normal left sections, we parse both as PostOp and let the post pass+mangle them into the correct form depending on context.++> trueexp :: { Exp L }+> : exp {% checkExpr $1 }++> exp :: { PExp L }+> : exp0b '::' truectype { ExpTypeSig ($1 <> $3 <** [$2]) $1 $3 }+> | exp0 { $1 }+> | exp0b qop { PostOp ($1 <> $2) $1 $2 }+> | exp0b '-<' exp { LeftArrApp ($1 <> $3 <** [$2]) $1 $3 }+> | exp0b '>-' exp { RightArrApp ($1 <> $3 <** [$2]) $1 $3 }+> | exp0b '-<<' exp { LeftArrHighApp ($1 <> $3 <** [$2]) $1 $3 }+> | exp0b '>>-' exp { RightArrHighApp ($1 <> $3 <** [$2]) $1 $3 }++> exp0 :: { PExp L }+> : exp0a { $1 }+> | exp0b { $1 }++> exp0a :: { PExp L }+> : exp0b qop exp10a { InfixApp ($1 <> $3) $1 $2 $3 }+> | exp10a { $1 }++> exp0b :: { PExp L }+> : exp0b qop exp10b { InfixApp ($1 <> $3) $1 $2 $3 }+> | exp10b { $1 }++> exp10a :: { PExp L }+> : '\\' apats '->' exp { Lambda (nIS $1 <++> ann $4 <** [$1,$3]) (reverse $2) $4 }+A let may bind implicit parameters+> | 'let' binds 'in' exp { Let (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }+> | 'if' exp 'then' exp 'else' exp { If (nIS $1 <++> ann $6 <** [$1,$3,$5]) $2 $4 $6 }+> | 'proc' apat '->' exp { Proc (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }+> | exppragma { $1 }++mdo blocks require the RecursiveDo extension enabled, but the lexer handles that.++> exp10b :: { PExp L }+> : 'case' exp 'of' altslist { let (als, inf, ss, b) = $4 in Case (nIS $1 <++> inf <** ($1:$3:ss) <?? b) $2 als }+> | '-' fexp { NegApp (nIS $1 <++> ann $2 <** [$1]) $2 }+> | 'do' stmtlist { let (sts, inf, ss, b) = $2 in Do (nIS $1 <++> inf <** $1:ss <?? b) sts }+> | 'mdo' stmtlist { let (sts, inf, ss, b) = $2 in MDo (nIS $1 <++> inf <** $1:ss <?? b) sts }+> | fexp { $1 }++> exppragma :: { PExp L }+> : '{-# CORE' STRING '#-}' exp { let Loc l (StringTok s) = $2 in CorePragma (nIS $1 <++> ann $4 <** [l,$3]) s $4 }+> | '{-# SCC' STRING '#-}' exp { let Loc l (StringTok s) = $2 in SCCPragma (nIS $1 <++> ann $4 <** [l,$3]) s $4 }+> | '{-# GENERATED' STRING INT ':' INT '-' INT ':' INT '#-}' exp+> { let { Loc l0 (StringTok s) = $2;+> Loc l1 (IntTok i1) = $3;+> Loc l2 (IntTok i2) = $5;+> Loc l3 (IntTok i3) = $7;+> Loc l4 (IntTok i4) = $9}+> in GenPragma (nIS $1 <++> ann $11 <** [$1,l0,l1,$4,l2,$6,l3,$8,l4,$10])+> s (fromInteger i1, fromInteger i2)+> (fromInteger i3, fromInteger i4) $11 }++> fexp :: { PExp L }+> : fexp aexp { App ($1 <> $2) $1 $2 }+> | aexp { $1 }++> apats :: { [Pat L] }+> : apats apat { $2 : $1 }+> | apat { [$1] }++> apat :: { Pat L }+> : aexp {% checkPattern $1 }+> | '!' aexp {% checkPattern (BangPat (nIS $1 <++> ann $2 <** [$1]) $2) }++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).++Non-linear name binding, @:, requires RegularPatterns, but the lexer handles that.++> aexp :: { PExp L }+> : qvar '@' aexp {% do { n <- checkUnQual $1;+> return (AsPat ($1 <> $3 <** [$2]) n $3) } }+> | qvar '@:' aexp {% do { n <- checkUnQual $1;+> return (CAsRP ($1 <> $3 <** [$2]) n $3) } }+> | '~' aexp { IrrPat (nIS $1 <++> ann $2 <** [$1]) $2 }+> | aexp1 { $1 }++Note: The first two alternatives of aexp1 are not necessarily record+updates: they could be labeled constructions.+Generics-style explicit type arguments need the Generics extension, but+we check that in the lexer.++> aexp1 :: { PExp L }+> : aexp1 '{' '}' {% liftM (amap (const (ann $1 <++> nIS $3 <** [$2,$3]))) $ mkRecConstrOrUpdate $1 [] }+> | aexp1 '{' fbinds '}' {% liftM (amap (const (ann $1 <++> nIS $4 <** ($2:reverse (snd $3) ++ [$4]))))+> $ mkRecConstrOrUpdate $1 (reverse (fst $3)) }+> | qvar '{|' truetype '|}' { ExplTypeArg (ann $1 <++> nIS $4 <** [$2,$4]) $1 $3 }+> | 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, enabled by the lexer.+Extensions using banana brackets are also enabled by the lexer. The only+thing we need to look at here is the erpats that use no non-standard lexemes.++> aexp2 :: { PExp L }+> : ivar { IPVar (ann $1) $1 }+> | qvar { Var (ann $1) $1 }+> | gcon { $1 }+> | literal { Lit (ann $1) $1 }+> | '(' texp ')' { Paren ($1 <^^> $3 <** [$1,$3]) $2 }+> | '(' texp tsectend { TupleSection ($1 <^^> head (snd $3) <** $1:reverse (snd $3)) (Just $2 : fst $3) }+> | '(' commas texp ')' { TupleSection ($1 <^^> $4 <** $1:reverse ($4:$2))+> (replicate (length $2 - 1) Nothing ++ [Just $3]) }+> | '(' commas texp tsectend { TupleSection ($1 <^^> head (snd $4) <** $1:reverse (snd $4 ++ $2))+> (replicate (length $2 - 1) Nothing ++ Just $3 : fst $4) }+> | '[' list ']' { amap (<** [$1,$3]) $ $2 ($1 <^^> $3) }+> | '_' { WildCard (nIS $1) }+> | '(' erpats ')' {% checkEnabled RegularPatterns >> return (Paren ($1 <^^> $3 <** [$1,$3]) $2) }+> | '(|' sexps '|)' { SeqRP ($1 <^^> $3 <** ($1:reverse (snd $2) ++ [$3])) $ reverse (fst $2) }+> | '(|' exp '|' quals '|)' { GuardRP ($1 <^^> $5 <** ($1:$3 : snd $4 ++ [$5])) $2 $ (reverse $ fst $4) }+> | xml { $1 }++Template Haskell - all this is enabled in the lexer.+> | IDSPLICE { let Loc l (THIdEscape s) = $1 in SpliceExp (nIS l) $ IdSplice (nIS l) s }+> | '$(' trueexp ')' { SpliceExp ($1 <^^> $3 <** [$1,$3]) $ ParenSplice (ann $2) $2 }+> | '[|' trueexp '|]' { BracketExp ($1 <^^> $3 <** [$1,$3]) $ ExpBracket (ann $2) $2 }+> | '[p|' exp0 '|]' {% do { p <- checkPattern $2;+> return $ BracketExp ($1 <^^> $3 <** [$1,$3]) $ PatBracket (ann p) p } }+> | '[t|' truectype '|]' { let l = $1 <^^> $3 <** [$1,$3] in BracketExp l $ TypeBracket l $2 }+> | '[d|' open topdecls close '|]' { let l = $1 <^^> $5 <** ($1:snd $3 ++ [$5]) in BracketExp l $ DeclBracket l (fst $3) }+> | VARQUOTE qvar { VarQuote (nIS $1 <++> ann $2 <** [$1]) $2 }+> | VARQUOTE qcon { VarQuote (nIS $1 <++> ann $2 <** [$1]) $2 }+> | TYPQUOTE tyvar { TypQuote (nIS $1 <++> ann $2 <** [$1]) (UnQual (ann $2) $2) }+> | TYPQUOTE gtycon { TypQuote (nIS $1 <++> ann $2 <** [$1]) $2 }+> | QUASIQUOTE { let Loc l (THQuasiQuote (n,q)) = $1 in QuasiQuote (nIS l) n q }+End Template Haskell++> commas :: { [S] }+> : commas ',' { $2 : $1 }+> | ',' { [$1] }++> texp :: { PExp L }+> : exp { $1 }+> | qopm exp0 { PreOp ($1 <> $2) $1 $2 }+> | exp '->' exp {% do {checkEnabled ViewPatterns;+> return $ ViewPat ($1 <> $3 <** [$2]) $1 $3} }++> tsectend :: { ([Maybe (PExp L)],[S]) }+> : commas texp tsectend { let (mes, ss) = $3 in (replicate (length $1 - 1) Nothing ++ Just $2 : mes, ss ++ $1) }+> | commas texp ')' { (replicate (length $1 - 1) Nothing ++ [Just $2], $3 : $1) }+> | commas ')' { (replicate (length $1) Nothing, $2 : $1) }++-----------------------------------------------------------------------------+Harp Extensions++> sexps :: { ([PExp L],[S]) }+> : sexps ',' exp { ($3 : fst $1, $2 : snd $1) }+> | exp { ([$1],[]) }++Either patterns are left associative+> erpats :: { PExp L }+> : exp '|' erpats { EitherRP ($1 <> $3 <** [$2]) $1 $3 }+> | exp '|' exp { EitherRP ($1 <> $3 <** [$2]) $1 $3 }++-----------------------------------------------------------------------------+Hsx Extensions - requires XmlSyntax, but the lexer handles all that.++> xml :: { PExp L }+> : '<' name attrs mattr '>' children '</' name '>' {% do { n <- checkEqNames $2 $8;+> let { cn = reverse $6;+> as = reverse $3;+> l = $1 <^^> $9 <** [$1,$5,$7,$9] };+> return $ XTag l n as $4 cn } }+> | '<' name attrs mattr '/>' { XETag ($1 <^^> $5 <** [$1,$5]) $2 (reverse $3) $4 }+> | '<%' exp '%>' { XExpTag ($1 <^^> $3 <** [$1,$3]) $2 }++> children :: { [PExp L] }+> : children child { $2 : $1 }+> | {- empty -} { [] }++> child :: { PExp L }+> : PCDATA { let Loc l (XPCDATA pcd) = $1 in XPcdata (nIS l) pcd }+> | '<[' sexps ']>' { XRPats ($1 <^^> $3 <** (snd $2 ++ [$1,$3])) $ reverse (fst $2) }+> | xml { $1 }++> name :: { XName L }+> : xmlname ':' xmlname { let {Loc l1 s1 = $1; Loc l2 s2 = $3}+> in XDomName (nIS l1 <++> nIS l2 <** [$2]) s1 s2 }+> | xmlname { let Loc l str = $1 in XName (nIS l) str }++> xmlname :: { Loc String }+> : VARID { let Loc l (VarId s) = $1 in Loc l s }+> | CONID { let Loc l (ConId s) = $1 in Loc l s }+> | DVARID { let Loc l (DVarId s) = $1 in Loc l $ mkDVar s }+> | xmlkeyword { $1 }++> xmlkeyword :: { Loc String }+> : 'type' { Loc $1 "type" }+> | 'class' { Loc $1 "class" }+> | 'data' { Loc $1 "data" }+> | 'foreign' { Loc $1 "foreign" }+> | 'export' { Loc $1 "export" }+> | 'safe' { Loc $1 "safe" }+> | 'unsafe' { Loc $1 "unsafe" }+> | 'threadsafe' { Loc $1 "threadsafe" }+> | 'stdcall' { Loc $1 "stdcall" }+> | 'ccall' { Loc $1 "ccall" }+> | 'as' { Loc $1 "as" }+> | 'by' { Loc $1 "by" }+> | 'case' { Loc $1 "case" }+> | 'default' { Loc $1 "default" }+> | 'deriving' { Loc $1 "deriving" }+> | 'do' { Loc $1 "do" }+> | 'else' { Loc $1 "else" }+> | 'family' { Loc $1 "family" }+> | 'forall' { Loc $1 "forall" }+> | 'group' { Loc $1 "group" }+> | 'hiding' { Loc $1 "hiding" }+> | 'if' { Loc $1 "if" }+> | 'import' { Loc $1 "import" }+> | 'in' { Loc $1 "in" }+> | 'infix' { Loc $1 "infix" }+> | 'infixl' { Loc $1 "infixl" }+> | 'infixr' { Loc $1 "infixr" }+> | 'instance' { Loc $1 "instance" }+> | 'let' { Loc $1 "let" }+> | 'mdo' { Loc $1 "mdo" }+> | 'module' { Loc $1 "module" }+> | 'newtype' { Loc $1 "newtype" }+> | 'of' { Loc $1 "of" }+> | 'proc' { Loc $1 "proc" }+> | 'rec' { Loc $1 "rec" }+> | 'then' { Loc $1 "then" }+> | 'using' { Loc $1 "using" }+> | 'where' { Loc $1 "where" }+> | 'qualified' { Loc $1 "qualified" }+++> attrs :: { [ParseXAttr L] }+> : attrs attr { $2 : $1 }+> | {- empty -} { [] }++> attr :: { ParseXAttr L }+> : name '=' aexp { XAttr ($1 <> $3 <** [$2]) $1 $3 }++> mattr :: { Maybe (PExp L) }++> : aexp { Just $1 }+> | {-empty-} { Nothing }++-----------------------------------------------------------------------------+List expressions++The rules below are little bit contorted to keep lexps left-recursive while+avoiding another shift/reduce-conflict.++> list :: { L -> PExp L }+> : texp { \l -> List l [$1] }+> | lexps { \l -> let (ps,ss) = $1 in List (l <** ss) ps }+> | texp '..' { \l -> EnumFrom (l <** [$2]) $1 }+> | texp ',' exp '..' { \l -> EnumFromThen (l <** [$2,$4]) $1 $3 }+> | texp '..' exp { \l -> EnumFromTo (l <** [$2]) $1 $3 }+> | texp ',' exp '..' exp { \l -> EnumFromThenTo (l <** [$2,$4]) $1 $3 $5 }+> | texp '|' pqualstmts { \l -> let (stss, ss) = $3 in ParComp (l <** ($2:ss)) $1 (reverse stss) }++> lexps :: { ([PExp L],[S]) }+> : lexps ',' texp { let (es, ss) = $1 in ($3 : es, $2 : ss) }+> | texp ',' texp { ([$3,$1], [$2]) }++-----------------------------------------------------------------------------+List comprehensions++> pqualstmts :: { ([[QualStmt L]],[S]) }+> : pqualstmts '|' qualstmts { let { (stss, ss1) = $1;+> (sts, ss2) = $3 }+> in (reverse sts : stss, ss1 ++ [$2] ++ reverse ss2) }+> | qualstmts { let (sts, ss) = $1 in ([reverse sts], reverse ss) }++> qualstmts :: { ([QualStmt L],[S]) }+> : qualstmts ',' qualstmt { let (sts, ss) = $1 in ($3 : sts, $2 : ss) }+> | qualstmt { ([$1],[]) }++> qualstmt :: { QualStmt L }+> : transformqual { $1 }+> | qual { QualStmt (ann $1) $1 }++> transformqual :: { QualStmt L }+> : 'then' trueexp { ThenTrans (nIS $1 <++> ann $2 <** [$1]) $2 }+> | 'then' trueexp 'by' trueexp { ThenBy (nIS $1 <++> ann $4 <** [$1,$3]) $2 $4 }+> | 'then' 'group' 'by' trueexp { GroupBy (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }+> | 'then' 'group' 'using' trueexp { GroupUsing (nIS $1 <++> ann $4 <** [$1,$2,$3]) $4 }+> | 'then' 'group' 'by' trueexp 'using' trueexp { GroupByUsing (nIS $1 <++> ann $6 <** [$1,$2,$3,$5]) $4 $6 }++> quals :: { ([Stmt L],[S]) }+> : quals ',' qual { let (sts, ss) = $1 in ($3 : sts, $2 : ss) }+> | qual { ([$1],[]) }++> qual :: { Stmt L }+> : pat '<-' trueexp { Generator ($1 <> $3 <** [$2]) $1 $3 }+> | trueexp { Qualifier (ann $1) $1 }+> | 'let' binds { LetStmt (nIS $1 <++> ann $2 <** [$1]) $2 }+++-----------------------------------------------------------------------------+Case alternatives++> altslist :: { ([Alt L],L,[S],Bool) }+> : '{' alts '}' { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3], True) }+> | open alts close { (fst $2, $1 <^^> $3, $1:snd $2 ++ [$3], False) }++> alts :: { ([Alt L],[S]) }+> : optsemis alts1 optsemis { (reverse $ fst $2, $1 ++ snd $2 ++ $3) }++> alts1 :: { ([Alt L],[S]) }+> : alts1 semis alt { ($3 : fst $1, snd $1 ++ $2) }+> | alt { ([$1],[]) }++> alt :: { Alt L }+> : pat ralt optwhere { Alt ($1 <> $2 <+?> (fmap ann) (fst $3) <** snd $3) $1 $2 (fst $3) }++> ralt :: { GuardedAlts L }+> : '->' trueexp { UnGuardedAlt (nIS $1 <++> ann $2 <** [$1]) $2 }+> | gdpats { GuardedAlts (snd $1) (reverse $ fst $1) }++> gdpats :: { ([GuardedAlt L],L) }+> : gdpats gdpat { ($2 : fst $1, snd $1 <++> ann $2) }+> | gdpat { ([$1], ann $1) }++A guard can be a pattern guard if PatternGuards is enabled, hence quals instead of exp0.+> gdpat :: { GuardedAlt L }+> : '|' quals '->' trueexp {% do { checkPatternGuards (fst $2);+> let {l = nIS $1 <++> ann $4 <** ($1:snd $2 ++ [$3])};+> return (GuardedAlt l (reverse (fst $2)) $4) } }++> pat :: { Pat L }+> : exp {% checkPattern $1 }+> | '!' aexp {% checkPattern (BangPat (nIS $1 <++> ann $2 <** [$1]) $2) }+-----------------------------------------------------------------------------+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.++TODO: The points can't be added here, must be propagated!++> stmtlist :: { ([Stmt L],L,[S],Bool) }+> : '{' stmts '}' { (fst $2, $1 <^^> $3, snd $2 ++ [$1,$3], True) }+> | open stmts close { (fst $2, $1 <^^> $3, snd $2 ++ [$1,$3], False) }++> stmts :: { ([Stmt L],[S]) }+> : stmt stmts1 { ($1 : fst $2, snd $2) }+> | ';' stmts { (fst $2, $1 : snd $2) }+> | {- empty -} { ([],[]) }++> stmts1 :: { ([Stmt L],[S]) }+> : ';' stmts { (fst $2, $1 : snd $2) }+> | {- empty -} { ([],[]) }++A let statement may bind implicit parameters.+> stmt :: { Stmt L }+> : 'let' binds { LetStmt (nIS $1 <++> ann $2 <** [$1]) $2 }+> | pat '<-' trueexp { Generator ($1 <> $3 <** [$2]) $1 $3 }+> | trueexp { Qualifier (ann $1) $1 }+> | 'rec' stmtlist { let (stms,inf,ss,b) = $2 in RecStmt (nIS $1 <++> inf <** $1:ss <?? b) stms }++-----------------------------------------------------------------------------+Record Field Update/Construction++> fbinds :: { ([PFieldUpdate L],[S]) }+> : fbinds ',' fbind { let (fbs, ss) = $1 in ($3 : fbs, $2 : ss) }+> | fbind { ([$1],[]) }++Puns and wild cards need the respective extensions enabled.++> fbind :: { PFieldUpdate L }+> : qvar '=' exp { FieldUpdate ($1 <>$3 <** [$2]) $1 $3 }+> | qvar {% checkEnabled NamedFieldPuns >> checkUnQual $1 >>= return . FieldPun (ann $1) }+> | '..' {% checkEnabled RecordWildCards >> return (FieldWildcard (nIS $1)) }++-----------------------------------------------------------------------------+Implicit parameter bindings - need the ImplicitParameter extension enabled, but the lexer handles that.++> ipbinds :: { ([IPBind L],[S]) }+> : optsemis ipbinds1 optsemis { (reverse (fst $2), reverse $1 ++ snd $2 ++ reverse $3) }++> ipbinds1 :: { ([IPBind L],[S]) }+> : ipbinds1 semis ipbind { ($3 : fst $1, snd $1 ++ reverse $2) }+> | ipbind { ([$1],[]) }++> ipbind :: { IPBind L }+> : ivar '=' trueexp { IPBind ($1 <> $3 <** [$2]) $1 $3 }++-----------------------------------------------------------------------------+Variables, Constructors and Operators.++> gcon :: { PExp L }+> : '(' ')' { p_unit_con ($1 <^^> $2 <** [$1,$2]) }+> | '[' ']' { List ($1 <^^> $2 <** [$1,$2]) [] }+> | '(' commas ')' { p_tuple_con ($1 <^^> $3 <** $1:reverse ($3:$2)) Boxed (length $2) }+> | '(#' '#)' { p_unboxed_singleton_con ($1 <^^> $2 <** [$1,$2]) }+> | '(#' commas '#)' { p_tuple_con ($1 <^^> $3 <** $1:reverse ($3:$2)) Unboxed (length $2) }+> | qcon { Con (ann $1) $1 }++> var :: { Name L }+> : varid { $1 }+> | '(' varsym ')' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> var_no_safety :: { Name L }+> : varid_no_safety { $1 }+> | '(' varsym ')' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> qvar :: { QName L }+> : qvarid { $1 }+> | '(' qvarsym ')' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++Implicit parameter+> ivar :: { IPName L }+> : ivarid { $1 }++> con :: { Name L }+> : conid { $1 }+> | '(' consym ')' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> qcon :: { QName L }+> : qconid { $1 }+> | '(' gconsym ')' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> varop :: { Name L }+> : varsym { $1 }+> | '`' varid '`' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> qvarop :: { QName L }+> : qvarsym { $1 }+> | '`' qvarid '`' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> qvaropm :: { QName L }+> : qvarsymm { $1 }+> | '`' qvarid '`' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> conop :: { Name L }+> : consym { $1 }+> | '`' conid '`' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> qconop :: { QName L }+> : gconsym { $1 }+> | '`' qconid '`' { amap (const ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3])) $2 }++> op :: { Op L }+> : varop { VarOp (ann $1) $1 }+> | conop { ConOp (ann $1) $1 }++> qop :: { QOp L }+> : qvarop { QVarOp (ann $1) $1 }+> | qconop { QConOp (ann $1) $1 }++> qopm :: { QOp L }+> : qvaropm { QVarOp (ann $1) $1 }+> | qconop { QConOp (ann $1) $1 }++> gconsym :: { QName L }+> : ':' { list_cons_name (nIS $1) }+> | qconsym { $1 }++-----------------------------------------------------------------------------+Identifiers and Symbols++> qvarid :: { QName L }+> : varid { UnQual (ann $1) $1 }+> | QVARID { let {Loc l (QVarId q) = $1; nis = nIS l}+> in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) }++> varid_no_safety :: { Name L }+> : VARID { let Loc l (VarId v) = $1 in Ident (nIS l) v }+> | 'as' { as_name (nIS $1) }+> | 'qualified' { qualified_name (nIS $1) }+> | 'hiding' { hiding_name (nIS $1) }+> | 'export' { export_name (nIS $1) }+> | 'stdcall' { stdcall_name (nIS $1) }+> | 'ccall' { ccall_name (nIS $1) }++> varid :: { Name L }+> : varid_no_safety { $1 }+> | 'safe' { safe_name (nIS $1) }+> | 'unsafe' { unsafe_name (nIS $1) }+> | 'threadsafe' { threadsafe_name (nIS $1) }+++Implicit parameter+> ivarid :: { IPName L }+> : IDUPID { let Loc l (IDupVarId i) = $1 in IPDup (nIS l) i }+> | ILINID { let Loc l (ILinVarId i) = $1 in IPLin (nIS l) i }++> qconid :: { QName L }+> : conid { UnQual (ann $1) $1 }+> | QCONID { let {Loc l (QConId q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Ident nis (snd q)) }++> conid :: { Name L }+> : CONID { let Loc l (ConId c) = $1 in Ident (nIS l) c }++> qconsym :: { QName L }+> : consym { UnQual (ann $1) $1 }+> | QCONSYM { let {Loc l (QConSym q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) }++> consym :: { Name L }+> : CONSYM { let Loc l (ConSym c) = $1 in Symbol (nIS l) c }++> qvarsym :: { QName L }+> : varsym { UnQual (ann $1) $1 }+> | qvarsym1 { $1 }++> qvarsymm :: { QName L }+> : varsymm { UnQual (ann $1) $1 }+> | qvarsym1 { $1 }++> varsym :: { Name L }+> : VARSYM { let Loc l (VarSym v) = $1 in Symbol (nIS l) v }+> | '-' { minus_name (nIS $1) }+> | '!' { bang_name (nIS $1) }+> | '.' { dot_name (nIS $1) }+> | '*' { star_name (nIS $1) }++> varsymm :: { Name L } -- varsym not including '-'+> : VARSYM { let Loc l (VarSym v) = $1 in Symbol (nIS l) v }+> | '!' { bang_name (nIS $1) }+> | '.' { dot_name (nIS $1) }+> | '*' { star_name (nIS $1) }++> qvarsym1 :: { QName L }+> : QVARSYM { let {Loc l (QVarSym q) = $1; nis = nIS l} in Qual nis (ModuleName nis (fst q)) (Symbol nis (snd q)) }++> literal :: { Literal L }+> : INT { let Loc l (IntTok i) = $1 in Int (nIS l) i }+> | CHAR { let Loc l (Character c) = $1 in Char (nIS l) c }+> | RATIONAL { let Loc l (FloatTok r) = $1 in Frac (nIS l) r }+> | STRING { let Loc l (StringTok s) = $1 in String (nIS l) s }+> | PRIMINT { let Loc l (IntTokHash i) = $1 in PrimInt (nIS l) i }+> | PRIMWORD { let Loc l (WordTokHash w) = $1 in PrimWord (nIS l) w }+> | PRIMFLOAT { let Loc l (FloatTokHash f) = $1 in PrimFloat (nIS l) f }+> | PRIMDOUBLE { let Loc l (DoubleTokHash d) = $1 in PrimDouble (nIS l) d }+> | PRIMCHAR { let Loc l (CharacterHash c) = $1 in PrimChar (nIS l) c }+> | PRIMSTRING { let Loc l (StringHash s) = $1 in PrimString (nIS l) s }++-----------------------------------------------------------------------------+Layout++> open :: { S } : {% pushCurrentContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x) (return x) -} }++> close :: { S }+> : vccurly { $1 {- >>= \x -> trace (show x ++ show x ++ show x) (return x) -} } -- context popped in lexer.+> | error {% popContext >> getSrcLoc >>= \s -> return $ mkSrcSpan s s {- >>= \x -> trace (show x ++ show x) (return x) -} }++-----------------------------------------------------------------------------+Miscellaneous (mostly renamings)++> modid :: { ModuleName L }+> : CONID { let Loc l (ConId n) = $1 in ModuleName (nIS l) n }+> | QCONID { let Loc l (QConId n) = $1 in ModuleName (nIS l) (fst n ++ '.':snd n) }++> tyconorcls :: { Name L }+> : con { $1 }++> qtyconorcls :: { QName L }+> : qcon { $1 }++> tyvar :: { Name L }+> : varid { $1 }++> qtyvarop :: { QName L }+> qtyvarop : '`' tyvar '`' { UnQual ($1 <^^> $3 <** [$1, srcInfoSpan (ann $2), $3]) $2 }+> | tyvarsym { UnQual (ann $1) $1 }++> tyvarsym :: { Name L }+> tyvarsym : VARSYM { let Loc l (VarSym x) = $1 in Symbol (nIS l) x }++-----------------------------------------------------------------------------++> {++> type L = SrcSpanInfo -- just for convenience+> type S = SrcSpan++> parseError :: Loc Token -> P a+> parseError t = fail $ "Parse error: " ++ show t++> (<>) :: (Annotated a, Annotated b) => a SrcSpanInfo -> b SrcSpanInfo -> SrcSpanInfo+> a <> b = ann a <++> ann b+>+> infixl 6 <>++> -- | Class to reuse the parse function at many different types.+> class Parseable ast where+> -- | Parse a string with default mode.+> parse :: String -> ParseResult ast+> -- | Parse a string with an explicit mode.+> parseWithMode :: ParseMode -> String -> ParseResult ast+> -- | Parse a string with an explicit mode, returning all comments along the AST+> parseWithComments :: ParseMode -> String -> ParseResult (ast, [Comment])++>+> instance SrcInfo loc => Parseable (Module loc) where+> parse = fmap (fmap fromSrcInfo) . parseModule+> parseWithMode md = fmap (fmap fromSrcInfo) . parseModuleWithMode md+> parseWithComments md s = parseModuleWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs)+>+> instance SrcInfo loc => Parseable (Exp loc) where+> parse = fmap (fmap fromSrcInfo) . parseExp+> parseWithMode md = fmap (fmap fromSrcInfo) . parseExpWithMode md+> parseWithComments md s = parseExpWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs)+>+> instance SrcInfo loc => Parseable (Pat loc) where+> parse = fmap (fmap fromSrcInfo) . parsePat+> parseWithMode md = fmap (fmap fromSrcInfo) . parsePatWithMode md+> parseWithComments md s = parsePatWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs)+>+> instance SrcInfo loc => Parseable (Decl loc) where+> parse = fmap (fmap fromSrcInfo) . parseDecl+> parseWithMode md = fmap (fmap fromSrcInfo) . parseDeclWithMode md+> parseWithComments md s = parseDeclWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs)+>+> instance SrcInfo loc => Parseable (Type loc) where+> parse = fmap (fmap fromSrcInfo) . parseType+> parseWithMode md = fmap (fmap fromSrcInfo) . parseTypeWithMode md+> parseWithComments md s = parseTypeWithComments md s >>= \(r, cs) -> return (fmap fromSrcInfo r, cs)+>++> -- | Parse of a string, which should contain a complete Haskell module.+> parseModule :: String -> ParseResult (Module L)+> parseModule = simpleParse mparseModule++> -- | Parse of a string containing a complete Haskell module, using an explicit mode.+> parseModuleWithMode :: ParseMode -> String -> ParseResult (Module L)+> parseModuleWithMode = modeParse mparseModule++> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.+> parseModuleWithComments :: ParseMode -> String -> ParseResult (Module L, [Comment])+> parseModuleWithComments = commentParse mparseModule++> -- | Parse of a string containing a Haskell expression.+> parseExp :: String -> ParseResult (Exp L)+> parseExp = simpleParse mparseExp++> -- | Parse of a string containing a Haskell expression, using an explicit mode.+> parseExpWithMode :: ParseMode -> String -> ParseResult (Exp L)+> parseExpWithMode = modeParse mparseExp++> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.+> parseExpWithComments :: ParseMode -> String -> ParseResult (Exp L, [Comment])+> parseExpWithComments = commentParse mparseExp++> -- | Parse of a string containing a Haskell pattern.+> parsePat :: String -> ParseResult (Pat L)+> parsePat = simpleParse mparsePat++> -- | Parse of a string containing a Haskell pattern, using an explicit mode.+> parsePatWithMode :: ParseMode -> String -> ParseResult (Pat L)+> parsePatWithMode = modeParse mparsePat++> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.+> parsePatWithComments :: ParseMode -> String -> ParseResult (Pat L, [Comment])+> parsePatWithComments = commentParse mparsePat++> -- | Parse of a string containing a Haskell top-level declaration.+> parseDecl :: String -> ParseResult (Decl L)+> parseDecl = simpleParse mparseDecl++> -- | Parse of a string containing a Haskell top-level declaration, using an explicit mode.+> parseDeclWithMode :: ParseMode -> String -> ParseResult (Decl L)+> parseDeclWithMode = modeParse mparseDecl++> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.+> parseDeclWithComments :: ParseMode -> String -> ParseResult (Decl L, [Comment])+> parseDeclWithComments = commentParse mparseDecl++> -- | Parse of a string containing a Haskell type.+> parseType :: String -> ParseResult (Type L)+> parseType = runParser mparseType++> -- | Parse of a string containing a Haskell type, using an explicit mode.+> parseTypeWithMode :: ParseMode -> String -> ParseResult (Type L)+> parseTypeWithMode mode = runParserWithMode mode mparseType++> -- | Parse of a string containing a complete Haskell module, using an explicit mode, retaining comments.+> parseTypeWithComments :: ParseMode -> String -> ParseResult (Type L, [Comment])+> parseTypeWithComments mode str = runParserWithModeComments mode mparseType str+++> simpleParse :: AppFixity a => P a -> String -> ParseResult a+> simpleParse p = fmap (applyFixities preludeFixities) . runParser p++> modeParse :: AppFixity a => P a -> ParseMode -> String -> ParseResult a+> modeParse p mode = fmap (applyFixities (fixities mode)) . runParserWithMode mode p++> commentParse :: AppFixity a => P a -> ParseMode -> String -> ParseResult (a, [Comment])+> commentParse p mode str = runParserWithModeComments mode p str+> >>= \(ast, cs) -> return (applyFixities (fixities mode) ast, cs)++> -- | Partial parse of a string starting with a series of top-level option pragmas.+> getTopPragmas :: String -> ParseResult [OptionPragma L]+> getTopPragmas = runParser (mfindOptPragmas >>= \(ps,_,_) -> return ps)++>++> }
+ src/Language/Haskell/Exts/Annotated/Pretty.hs view
@@ -0,0 +1,1238 @@+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Pretty+-- Copyright : (c) Niklas Broberg 2004-2009,+-- (c) The GHC Team, Noel Winstanley 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- Pretty printer for Haskell with extensions.+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Annotated.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.Annotated.Syntax+import Language.Haskell.Exts.Annotated.SrcLoc++import qualified Text.PrettyPrint as P+import Data.List (intersperse)++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+ }++-- | 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+ }++-- | 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.Exts.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 SrcInfo pos => Pretty (Module pos) where+ pretty (Module pos mbHead os imp decls) =+ markLine pos $+ myVcat $ map pretty os +++ (case mbHead of+ Nothing -> id+ Just h -> \x -> [topLevel (pretty h) x])+ (map pretty imp ++ map pretty decls)+ pretty (XmlPage pos os n attrs mattr cs) =+ markLine pos $+ myVcat $ map pretty os +++ [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 (XmlHybrid pos mbHead os imp decls n attrs mattr cs) =+ markLine pos $+ myVcat $ map pretty os ++ [text "<%"] +++ (case mbHead of+ Nothing -> id+ Just h -> \x -> [topLevel (pretty h) x])+ (map pretty imp ++ map pretty decls +++ [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 '>']]])++++-------------------------- Module Header ------------------------------+instance Pretty (ModuleHead l) where+ pretty (ModuleHead _ m mbWarn mbExportList) = mySep [+ text "module",+ pretty m,+ maybePP pretty mbWarn,+ maybePP pretty mbExportList,+ text "where"]++instance Pretty (WarningText l) where+ pretty = ppWarnTxt++ppWarnTxt :: WarningText l -> Doc+ppWarnTxt (DeprText _ s) = mySep [text "{-# DEPRECATED", text s, text "#-}"]+ppWarnTxt (WarnText _ s) = mySep [text "{-# WARNING", text s, text "#-}"]++instance Pretty (ModuleName l) where+ pretty (ModuleName _ modName) = text modName++instance Pretty (ExportSpecList l) where+ pretty (ExportSpecList _ especs) = parenList $ map pretty especs++instance Pretty (ExportSpec l) where+ pretty (EVar _ name) = pretty name+ pretty (EAbs _ name) = pretty name+ pretty (EThingAll _ name) = pretty name <> text "(..)"+ pretty (EThingWith _ name nameList) =+ pretty name <> (parenList . map pretty $ nameList)+ pretty (EModuleContents _ m) = text "module" <+> pretty m++instance SrcInfo pos => Pretty (ImportDecl pos) where+ pretty (ImportDecl pos m qual src mbPkg mbName mbSpecs) =+ markLine pos $+ mySep [text "import",+ if src then text "{-# SOURCE #-}" else empty,+ if qual then text "qualified" else empty,+ maybePP (\s -> text (show s)) mbPkg,+ pretty m,+ maybePP (\m' -> text "as" <+> pretty m') mbName,+ maybePP exports mbSpecs]+ where+ exports (ImportSpecList _ b specList) =+ if b then text "hiding" <+> specs else specs+ where specs = parenList . map pretty $ specList++instance Pretty (ImportSpec l) where+ pretty (IVar _ name) = pretty name+ pretty (IAbs _ name) = pretty name+ pretty (IThingAll _ name) = pretty name <> text "(..)"+ pretty (IThingWith _ name nameList) =+ pretty name <> (parenList . map pretty $ nameList)++------------------------- Declarations ------------------------------+instance SrcInfo pos => Pretty (Decl pos) where+ pretty (TypeDecl loc name nameList htype) =+ blankline $+ markLine loc $+ mySep ( [text "type", pretty name]+ ++ map pretty nameList+ ++ [equals, pretty htype])++ pretty (DataDecl loc don context name nameList constrList derives) =+ blankline $+ markLine loc $+ mySep ( [pretty don, ppContext context, pretty name]+ ++ map pretty nameList)+ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppDeriving derives)++ pretty (GDataDecl loc don context name nameList optkind gadtList derives) =+ blankline $+ markLine loc $+ mySep ( [pretty don, ppContext context, pretty name]+ ++ map pretty nameList ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)+ $$$ ppDeriving derives++ pretty (TypeFamDecl loc name nameList optkind) =+ blankline $+ markLine loc $+ mySep ([text "type", text "family", pretty name]+ ++ map pretty nameList+ ++ ppOptKind optkind)++ pretty (DataFamDecl loc context name nameList optkind) =+ blankline $+ markLine loc $+ mySep ( [text "data", text "family", ppContext context, pretty name]+ ++ map pretty nameList ++ ppOptKind optkind)++ pretty (TypeInsDecl loc ntype htype) =+ blankline $+ markLine loc $+ mySep [text "type", text "instance", pretty ntype, equals, pretty htype]++ pretty (DataInsDecl loc don ntype constrList derives) =+ blankline $+ markLine loc $+ mySep [pretty don, text "instance", pretty ntype]+ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppDeriving derives)++ pretty (GDataInsDecl loc don ntype optkind gadtList derives) =+ blankline $+ markLine loc $+ mySep ( [pretty don, text "instance", pretty ntype]+ ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)+ $$$ ppDeriving derives++ --m{spacing=False}+ -- special case for empty class declaration+ pretty (ClassDecl pos context name nameList fundeps Nothing) =+ blankline $+ markLine pos $+ mySep ( [text "class", ppContext context, pretty name]+ ++ map pretty nameList ++ [ppFunDeps fundeps])+ pretty (ClassDecl pos context name nameList fundeps (Just declList)) =+ blankline $+ markLine pos $+ mySep ( [text "class", ppContext 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 (InstDecl pos context name args Nothing) =+ blankline $+ markLine pos $+ mySep ( [text "instance", ppContext context, pretty name]+ ++ map ppAType args)+ pretty (InstDecl pos context name args (Just declList)) =+ blankline $+ markLine pos $+ mySep ( [text "instance", ppContext context, pretty name]+ ++ map ppAType args ++ [text "where"])+ $$$ ppBody classIndent (map pretty declList)++ pretty (DerivDecl pos context name args) =+ blankline $+ markLine pos $+ mySep ( [text "deriving", text "instance", ppContext context, pretty name]+ ++ map ppAType args)+ pretty (DefaultDecl pos htypes) =+ blankline $+ markLine pos $+ text "default" <+> parenList (map pretty htypes)++ pretty (SpliceDecl pos splice) =+ blankline $+ markLine pos $+ pretty splice++ pretty (TypeSig pos nameList qualType) =+ blankline $+ markLine pos $+ mySep ((punctuate comma . map pretty $ nameList)+ ++ [text "::", pretty qualType])++ pretty (FunBind _ matches) = do+ e <- fmap layout getPPEnv+ case e of PPOffsideRule -> foldr ($$$) empty (map pretty matches)+ _ -> foldr (\x y -> x <> semi <> y) empty (map pretty matches)++ pretty (PatBind pos pat optsig rhs whereBinds) =+ markLine pos $+ myFsep [pretty pat, maybePP ppSig optsig, pretty rhs] $$$ ppWhere whereBinds++ pretty (InfixDecl pos assoc prec opList) =+ blankline $+ markLine pos $+ mySep ([pretty assoc, maybePP int prec]+ ++ (punctuate comma . map pretty $ opList))++ pretty (ForImp pos cconv msaf str name typ) =+ blankline $+ markLine pos $+ mySep [text "foreign import", pretty cconv, maybePP pretty msaf,+ text (show str), pretty name, text "::", pretty typ]++ pretty (ForExp pos cconv str name typ) =+ blankline $+ markLine pos $+ mySep [text "foreign export", pretty cconv,+ text (show str), pretty name, text "::", pretty typ]++ pretty (RulePragmaDecl pos rules) =+ blankline $+ markLine pos $+ myVcat $ text "{-# RULES" : map pretty rules ++ [text " #-}"]++ pretty (DeprPragmaDecl pos deprs) =+ blankline $+ markLine pos $+ myVcat $ text "{-# DEPRECATED" : map ppWarnDepr deprs ++ [text " #-}"]++ pretty (WarnPragmaDecl pos deprs) =+ blankline $+ markLine pos $+ myVcat $ text "{-# WARNING" : map ppWarnDepr deprs ++ [text " #-}"]++ pretty (InlineSig pos inl mactiv name) =+ blankline $+ markLine pos $+ mySep [text (if inl then "{-# INLINE" else "{-# NOINLINE"), maybePP pretty mactiv, pretty name, text "#-}"]++ pretty (SpecSig pos name types) =+ blankline $+ markLine pos $+ mySep $ [text "{-# SPECIALISE", pretty name, text "::"]+ ++ punctuate comma (map pretty types) ++ [text "#-}"]++ pretty (SpecInlineSig pos inl mactiv name types) =+ blankline $+ markLine pos $+ mySep $ [text "{-# SPECIALISE", text (if inl then "INLINE" else "NOINLINE"),+ maybePP pretty mactiv, pretty name, text "::"]+ ++ (punctuate comma $ map pretty types) ++ [text "#-}"]++ pretty (InstSig pos context name args) =+ blankline $+ markLine pos $+ mySep $ [text "{-# SPECIALISE", text "instance", ppContext context, pretty name]+ ++ map ppAType args ++ [text "#-}"]++{- pretty (UnknownDeclPragma pos n s) =+ blankline $+ markLine pos $+ mySep $ [text "{-#", text n, text s, text "#-}"] -}+++instance Pretty (DataOrNew l) where+ pretty (DataType _) = text "data"+ pretty (NewType _) = text "newtype"++instance Pretty (Assoc l) where+ pretty (AssocNone _) = text "infix"+ pretty (AssocLeft _) = text "infixl"+ pretty (AssocRight _) = text "infixr"++instance SrcInfo pos => Pretty (Match pos) where+ pretty (Match pos f ps optsig rhs whereBinds) =+ markLine pos $+ myFsep (lhs ++ [maybePP ppSig optsig, pretty rhs])+ $$$ ppWhere whereBinds+ where+ lhs = case ps of+ l:r:ps' | isSymbolName f ->+ let hd = [pretty l, ppName f, pretty r] in+ if null ps' then hd+ else parens (myFsep hd) : map (prettyPrec 2) ps'+ _ -> pretty f : map (prettyPrec 2) ps++ppWhere :: SrcInfo loc => Maybe (Binds loc) -> Doc+ppWhere Nothing = empty+ppWhere (Just (BDecls _ [])) = empty -- this case is really an anomaly+ppWhere (Just (BDecls _ l)) = nest 2 (text "where" $$$ ppBody whereIndent (map pretty l))+ppWhere (Just (IPBinds _ b)) = nest 2 (text "where" $$$ ppBody whereIndent (map pretty b))++ppSig :: (Type l) -> Doc+ppSig t = text "::" <+> pretty t++instance SrcInfo loc => Pretty (ClassDecl loc) where+ pretty (ClsDecl _ decl) = pretty decl++ pretty (ClsDataFam loc context name nameList optkind) =+ markLine loc $+ mySep ( [text "data", ppContext context, pretty name]+ ++ map pretty nameList ++ ppOptKind optkind)++ pretty (ClsTyFam loc name nameList optkind) =+ markLine loc $+ mySep ( [text "type", pretty name]+ ++ map pretty nameList ++ ppOptKind optkind)++ pretty (ClsTyDef loc ntype htype) =+ markLine loc $+ mySep [text "type", pretty ntype, equals, pretty htype]++instance SrcInfo loc => Pretty (InstDecl loc) where+ pretty (InsDecl _ decl) = pretty decl++ pretty (InsType loc ntype htype) =+ markLine loc $+ mySep [text "type", pretty ntype, equals, pretty htype]++ pretty (InsData loc don ntype constrList derives) =+ markLine loc $+ mySep [pretty don, pretty ntype]+ <+> (myVcat (zipWith (<+>) (equals : repeat (char '|'))+ (map pretty constrList))+ $$$ ppDeriving derives)++ pretty (InsGData loc don ntype optkind gadtList derives) =+ markLine loc $+ mySep ( [pretty don, pretty ntype]+ ++ ppOptKind optkind ++ [text "where"])+ $$$ ppBody classIndent (map pretty gadtList)+ $$$ ppDeriving derives++ pretty (InsInline loc inl mactiv name) =+ markLine loc $+ mySep [text (if inl then "{-# INLINE" else "{-# NOINLINE"), maybePP pretty mactiv, pretty name, text "#-}"]+++------------------------- FFI stuff -------------------------------------+instance Pretty (Safety l) where+ pretty (PlayRisky _) = text "unsafe"+ pretty (PlaySafe _ b) = text $ if b then "threadsafe" else "safe"++instance Pretty (CallConv l) where+ pretty (StdCall _) = text "stdcall"+ pretty (CCall _) = text "ccall"++------------------------- Pragmas ---------------------------------------+ppWarnDepr :: ([Name l], String) -> Doc+ppWarnDepr (names, txt) = mySep $ (punctuate comma $ map pretty names) ++ [text $ show txt]++instance SrcInfo loc => Pretty (Rule loc) where+ pretty (Rule _ tag mactiv rvs rhs lhs) =+ mySep $ [text $ show tag, maybePP pretty mactiv,+ maybePP ppRuleVars rvs,+ pretty rhs, char '=', pretty lhs]++ppRuleVars :: [RuleVar l] -> Doc+ppRuleVars [] = empty+ppRuleVars rvs = mySep $ text "forall" : map pretty rvs ++ [char '.']++instance Pretty (Activation l) where+ pretty (ActiveFrom _ i) = char '[' <> int i <> char ']'+ pretty (ActiveUntil _ i) = text "[~" <> int i <> char ']'++instance Pretty (RuleVar l) where+ pretty (RuleVar _ n) = pretty n+ pretty (TypedRuleVar _ n t) = mySep [pretty n, text "::", pretty t]++instance Pretty (OptionPragma l) where+ pretty (LanguagePragma _ ns) =+ myFsep $ text "{-# LANGUAGE" : punctuate (char ',') (map pretty ns) ++ [text "#-}"]+ pretty (IncludePragma _ s) =+ myFsep $ [text "{-# INCLUDE", text s, text "#-}"]+ pretty (CFilesPragma _ s) =+ myFsep $ [text "{-# CFILES", text s, text "#-}"]+ pretty (OptionsPragma _ (Just tool) s) =+ myFsep $ [text "{-# OPTIONS_" <> pretty tool, text s, text "#-}"]+ pretty (OptionsPragma _ _ s) =+ myFsep $ [text "{-# OPTIONS", text s, text "#-}"]+{- pretty (UnknownTopPragma _ n s) =+ myFsep $ map text ["{-#", n, s, "#-}"] -}++instance Pretty Tool where+ pretty (UnknownTool s) = text s+ pretty t = text $ show t++------------------------- Data & Newtype Bodies -------------------------+instance Pretty (QualConDecl l) where+ pretty (QualConDecl _pos mtvs ctxt con) =+ myFsep [ppForall mtvs, ppContext ctxt, pretty con]++instance Pretty (GadtDecl l) where+ pretty (GadtDecl _pos name ty) =+ myFsep [pretty name, text "::", pretty ty]++instance Pretty (ConDecl l) where+ pretty (RecDecl _ name fieldList) =+ pretty name <> (braceList . map pretty $ fieldList)++{- pretty (ConDecl name@(Symbol _) [l, r]) =+ myFsep [prettyPrec prec_btype l, ppName name,+ prettyPrec prec_btype r] -}+ pretty (ConDecl _ name typeList) =+ mySep $ ppName name : map (prettyPrec prec_atype) typeList+ pretty (InfixConDecl _ l name r) =+ myFsep [prettyPrec prec_btype l, ppNameInfix name,+ prettyPrec prec_btype r]++instance Pretty (FieldDecl l) where+ pretty (FieldDecl _ names ty) =+ myFsepSimple $ (punctuate comma . map pretty $ names) +++ [text "::", pretty ty]++{-+ppField :: ([Name l],BangType l) -> Doc+ppField (names, ty) =+ myFsepSimple $ (punctuate comma . map pretty $ names) +++ [text "::", pretty ty]+-}++instance Pretty (BangType l) where+ prettyPrec _ (BangedTy _ ty) = char '!' <> ppAType ty+ prettyPrec p (UnBangedTy _ ty) = prettyPrec p ty+ prettyPrec p (UnpackedTy _ ty) = text "{-# UNPACK #-}" <+> char '!' <> prettyPrec p ty++ppDeriving :: Maybe [Deriving l] -> Doc+ppDeriving Nothing = empty+ppDeriving (Just []) = text "deriving" <+> parenList []+ppDeriving (Just [Deriving _ d []]) = text "deriving" <+> ppQName d+ppDeriving (Just ds) = text "deriving" <+> parenList (map ppDer ds)+ where ppDer :: Deriving l -> Doc+ ppDer (Deriving _ n ts) = mySep (pretty n : map pretty ts)++------------------------- Types -------------------------+ppBType :: Type l -> Doc+ppBType = prettyPrec prec_btype++ppAType :: Type l -> Doc+ppAType = 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 (Type l) where+ prettyPrec p (TyForall _ mtvs ctxt htype) = parensIf (p > 0) $+ myFsep [ppForall mtvs, ppContext ctxt, pretty htype]+ prettyPrec p (TyFun _ a b) = parensIf (p > 0) $+ myFsep [ppBType a, text "->", pretty b]+ prettyPrec _ (TyTuple _ bxd l) =+ let ds = map pretty l+ in case bxd of+ Boxed -> parenList ds+ Unboxed -> hashParenList ds+ prettyPrec _ (TyList _ t) = brackets $ pretty t+ prettyPrec p (TyApp _ a b) =+ {-+ | a == list_tycon = brackets $ pretty b -- special case+ | otherwise = -} parensIf (p > prec_btype) $+ myFsep [pretty a, ppAType b]+ prettyPrec _ (TyVar _ name) = pretty name+ prettyPrec _ (TyCon _ name) = pretty name+ prettyPrec _ (TyParen _ t) = parens (pretty t)+-- prettyPrec _ (TyPred asst) = pretty asst+ prettyPrec _ (TyInfix _ a op b) = myFsep [pretty a, ppQNameInfix op, pretty b]+ prettyPrec _ (TyKind _ t k) = parens (myFsep [pretty t, text "::", pretty k])+++instance Pretty (TyVarBind l) where+ pretty (KindedVar _ var kind) = parens $ myFsep [pretty var, text "::", pretty kind]+ pretty (UnkindedVar _ var) = pretty var++ppForall :: Maybe [TyVarBind l] -> Doc+ppForall Nothing = empty+ppForall (Just []) = empty+ppForall (Just vs) = myFsep (text "forall" : map pretty vs ++ [char '.'])++---------------------------- Kinds ----------------------------++instance Pretty (Kind l) where+ pretty (KindStar _) = text "*"+ pretty (KindBang _) = text "!"+ pretty (KindFn _ a b) = myFsep [pretty a, text "->", pretty b]+ pretty (KindParen _ k) = myFsep [text "(", pretty k, text ")"]++ppOptKind :: Maybe (Kind l) -> [Doc]+ppOptKind Nothing = []+ppOptKind (Just k) = [text "::", pretty k]++------------------- Functional Dependencies -------------------+instance Pretty (FunDep l) where+ pretty (FunDep _ from to) =+ myFsep $ map pretty from ++ [text "->"] ++ map pretty to+++ppFunDeps :: [FunDep l] -> Doc+ppFunDeps [] = empty+ppFunDeps fds = myFsep $ (char '|':) . punctuate comma . map pretty $ fds++------------------------- Expressions -------------------------+instance SrcInfo loc => Pretty (Rhs loc) where+ pretty (UnGuardedRhs _ e) = equals <+> pretty e+ pretty (GuardedRhss _ guardList) = myVcat . map pretty $ guardList++instance SrcInfo loc => Pretty (GuardedRhs loc) where+ pretty (GuardedRhs _pos guards ppBody) =+ myFsep $ [char '|'] ++ (punctuate comma . map pretty $ guards) ++ [equals, pretty ppBody]++instance Pretty (Literal l) where+ pretty (Int _ i) = integer i+ pretty (Char _ c) = text (show c)+ pretty (String _ s) = text (show s)+ pretty (Frac _ r) = double (fromRational r)+ -- GHC unboxed literals:+ pretty (PrimChar _ c) = text (show c) <> char '#'+ pretty (PrimString _ s) = text (show s) <> char '#'+ pretty (PrimInt _ i) = integer i <> char '#'+ pretty (PrimWord _ w) = integer w <> text "##"+ pretty (PrimFloat _ r) = float (fromRational r) <> char '#'+ pretty (PrimDouble _ r) = double (fromRational r) <> text "##"++instance SrcInfo loc => Pretty (Exp loc) where+ pretty (Lit _ l) = pretty l+ -- lambda stuff+ pretty (InfixApp _ a op b) = myFsep [pretty a, pretty op, pretty b]+ pretty (NegApp _ e) = myFsep [char '-', pretty e]+ pretty (App _ a b) = myFsep [pretty a, pretty b]+ pretty (Lambda _loc expList ppBody) = myFsep $+ char '\\' : map pretty expList ++ [text "->", pretty ppBody]+ -- keywords+ -- two cases for lets+ pretty (Let _ (BDecls _ declList) letBody) =+ ppLetExp declList letBody+ pretty (Let _ (IPBinds _ bindList) letBody) =+ ppLetExp bindList letBody++ pretty (If _ cond thenexp elsexp) =+ myFsep [text "if", pretty cond,+ text "then", pretty thenexp,+ text "else", pretty elsexp]+ pretty (Case _ cond altList) =+ myFsep [text "case", pretty cond, text "of"]+ $$$ ppBody caseIndent (map pretty altList)+ pretty (Do _ stmtList) =+ text "do" $$$ ppBody doIndent (map pretty stmtList)+ pretty (MDo _ stmtList) =+ text "mdo" $$$ ppBody doIndent (map pretty stmtList)+ -- Constructors & Vars+ pretty (Var _ name) = pretty name+ pretty (IPVar _ ipname) = pretty ipname+ pretty (Con _ name) = pretty name+ pretty (Tuple _ expList) = parenList . map pretty $ expList+ pretty (TupleSection _ mExpList) = parenList . map (maybePP pretty) $ mExpList+ -- weird stuff+ pretty (Paren _ e) = parens . pretty $ e+ pretty (LeftSection _ e op) = parens (pretty e <+> pretty op)+ pretty (RightSection _ op e) = parens (pretty op <+> pretty e)+ pretty (RecConstr _ c fieldList) =+ pretty c <> (braceList . map pretty $ fieldList)+ pretty (RecUpdate _ e fieldList) =+ pretty e <> (braceList . map pretty $ fieldList)+ -- Lists+ pretty (List _ list) =+ bracketList . punctuate comma . map pretty $ list+ pretty (EnumFrom _ e) =+ bracketList [pretty e, text ".."]+ pretty (EnumFromTo _ from to) =+ bracketList [pretty from, text "..", pretty to]+ pretty (EnumFromThen _ from thenE) =+ bracketList [pretty from <> comma, pretty thenE, text ".."]+ pretty (EnumFromThenTo _ from thenE to) =+ bracketList [pretty from <> comma, pretty thenE,+ text "..", pretty to]+ pretty (ListComp _ e qualList) =+ bracketList ([pretty e, char '|']+ ++ (punctuate comma . map pretty $ qualList))+ pretty (ParComp _ e qualLists) =+ bracketList (intersperse (char '|') $+ pretty e : (punctuate comma . concatMap (map pretty) $ qualLists))+ pretty (ExpTypeSig _pos e ty) =+ myFsep [pretty e, text "::", pretty ty]+ -- Template Haskell+ pretty (BracketExp _ b) = pretty b+ pretty (SpliceExp _ s) = pretty s+ pretty (TypQuote _ t) = text "\'\'" <> pretty t+ pretty (VarQuote _ x) = text "\'" <> pretty x+ pretty (QuasiQuote _ n qt) = text ("[$" ++ n ++ "|" ++ qt ++ "|]")+ -- Hsx+ pretty (XTag _ 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 (XETag _ n attrs mattr) =+ let ax = maybe [] (return . pretty) mattr+ in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ax ++ [text "/>"]+ pretty (XPcdata _ s) = text s+ pretty (XExpTag _ e) =+ myFsep $ [text "<%", pretty e, text "%>"]+ -- Pragmas+ pretty (CorePragma _ s e) = myFsep $ map text ["{-# CORE", show s, "#-}"] ++ [pretty e]+ pretty (SCCPragma _ s e) = myFsep $ map text ["{-# SCC", show s, "#-}"] ++ [pretty e]+ pretty (GenPragma _ s (a,b) (c,d) e) =+ myFsep $ [text "{-# GENERATED", text $ show s,+ int a, char ':', int b, char '-',+ int c, char ':', int d, text "#-}", pretty e]+ -- Arrows+ pretty (Proc _ p e) = myFsep $ [text "proc", pretty p, text "->", pretty e]+ pretty (LeftArrApp _ l r) = myFsep $ [pretty l, text "-<", pretty r]+ pretty (RightArrApp _ l r) = myFsep $ [pretty l, text ">-", pretty r]+ pretty (LeftArrHighApp _ l r) = myFsep $ [pretty l, text "-<<", pretty r]+ pretty (RightArrHighApp _ l r) = myFsep $ [pretty l, text ">>-", pretty r]+++instance SrcInfo loc => Pretty (XAttr loc) where+ pretty (XAttr _ n v) =+ myFsep [pretty n, char '=', pretty v]++instance Pretty (XName l) where+ pretty (XName _ n) = text n+ pretty (XDomName _ d n) = text d <> char ':' <> text n++--ppLetExp :: [Decl] -> Exp -> 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 SrcInfo loc => Pretty (Bracket loc) where+ pretty (ExpBracket _ e) = ppBracket "[|" e+ pretty (PatBracket _ p) = ppBracket "[p|" p+ pretty (TypeBracket _ t) = ppBracket "[t|" t+ pretty (DeclBracket _ d) =+ myFsep $ text "[d|" : map pretty d ++ [text "|]"]++ppBracket o x = myFsep [text o, pretty x, text "|]"]++instance SrcInfo loc => Pretty (Splice loc) where+ pretty (IdSplice _ s) = char '$' <> text s+ pretty (ParenSplice _ e) =+ myFsep [text "$(", pretty e, char ')']++------------------------- Patterns -----------------------------++instance SrcInfo loc => Pretty (Pat loc) where+ prettyPrec _ (PVar _ name) = pretty name+ prettyPrec _ (PLit _ lit) = pretty lit+ prettyPrec _ (PNeg _ p) = myFsep [char '-', pretty p]+ prettyPrec p (PInfixApp _ a op b) = parensIf (p > 0) $+ myFsep [pretty a, pretty (QConOp (ann op) op), pretty b]+ prettyPrec p (PApp _ n ps) = parensIf (p > 1) $+ myFsep (pretty n : map pretty ps)+ prettyPrec _ (PTuple _ ps) = parenList . map pretty $ ps+ prettyPrec _ (PList _ ps) =+ bracketList . punctuate comma . map pretty $ ps+ prettyPrec _ (PParen _ p) = parens . pretty $ p+ prettyPrec _ (PRec _ c fields) =+ pretty c <> (braceList . map pretty $ fields)+ -- special case that would otherwise be buggy+ prettyPrec _ (PAsPat _ name (PIrrPat _ pat)) =+ myFsep [pretty name <> char '@', char '~' <> pretty pat]+ prettyPrec _ (PAsPat _ name pat) =+ hcat [pretty name, char '@', pretty pat]+ prettyPrec _ (PWildCard _) = char '_'+ prettyPrec _ (PIrrPat _ pat) = char '~' <> pretty pat+ prettyPrec _ (PatTypeSig _pos pat ty) =+ myFsep [pretty pat, text "::", pretty ty]+ prettyPrec _ (PViewPat _ e p) =+ myFsep [pretty e, text "->", pretty p]+ prettyPrec _ (PNPlusK _ n k) =+ myFsep [pretty n, text "+", text $ show k]+ -- HaRP+ prettyPrec _ (PRPat _ rs) =+ bracketList . punctuate comma . map pretty $ rs+ -- Hsx+ prettyPrec _ (PXTag _ 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 '>']):+ map pretty cp ++ [myFsep $ [text "</" <> pretty n, char '>']]+ prettyPrec _ (PXETag _ n attrs mattr) =+ let ap = maybe [] (return . pretty) mattr+ in myFsep $ (char '<' <> pretty n): map pretty attrs ++ ap ++ [text "/>"]+ prettyPrec _ (PXPcdata _ s) = text s+ prettyPrec _ (PXPatTag _ p) =+ myFsep $ [text "<%", pretty p, text "%>"]+ prettyPrec _ (PXRPats _ ps) =+ myFsep $ text "<[" : map pretty ps ++ [text "%>"]+ -- Generics+ prettyPrec _ (PExplTypeArg _ qn t) =+ myFsep [pretty qn, text "{|", pretty t, text "|}"]+ -- BangPatterns+ prettyPrec _ (PBangPat _ p) = text "!" <> pretty p++instance SrcInfo loc => Pretty (PXAttr loc) where+ pretty (PXAttr _ n p) =+ myFsep [pretty n, char '=', pretty p]++instance SrcInfo loc => Pretty (PatField loc) where+ pretty (PFieldPat _ name pat) =+ myFsep [pretty name, equals, pretty pat]+ pretty (PFieldPun _ name) = pretty name+ pretty (PFieldWildcard _) = text ".."++--------------------- Regular Patterns -------------------------++instance SrcInfo loc => Pretty (RPat loc) where+ pretty (RPOp _ r op) = pretty r <> pretty op+ pretty (RPEither _ r1 r2) = parens . myFsep $+ [pretty r1, char '|', pretty r2]+ pretty (RPSeq _ rs) =+ myFsep $ text "(/" : map pretty rs ++ [text "/)"]+ pretty (RPGuard _ r gs) =+ myFsep $ text "(|" : pretty r : char '|' : map pretty gs ++ [text "|)"]+ -- special case that would otherwise be buggy+ pretty (RPCAs _ n (RPPat _ (PIrrPat _ p))) =+ myFsep [pretty n <> text "@:", char '~' <> pretty p]+ pretty (RPCAs _ n r) = hcat [pretty n, text "@:", pretty r]+ -- special case that would otherwise be buggy+ pretty (RPAs _ n (RPPat _ (PIrrPat _ p))) =+ myFsep [pretty n <> text "@:", char '~' <> pretty p]+ pretty (RPAs _ n r) = hcat [pretty n, char '@', pretty r]+ pretty (RPPat _ p) = pretty p+ pretty (RPParen _ rp) = parens . pretty $ rp++instance Pretty (RPatOp l) where+ pretty (RPStar _) = char '*'+ pretty (RPStarG _) = text "*!"+ pretty (RPPlus _) = char '+'+ pretty (RPPlusG _) = text "+!"+ pretty (RPOpt _) = char '?'+ pretty (RPOptG _) = text "?!"++------------------------- Case bodies -------------------------+instance SrcInfo loc => Pretty (Alt loc) where+ pretty (Alt _pos e gAlts binds) =+ pretty e <+> pretty gAlts $$$ ppWhere binds++instance SrcInfo loc => Pretty (GuardedAlts loc) where+ pretty (UnGuardedAlt _ e) = text "->" <+> pretty e+ pretty (GuardedAlts _ altList) = myVcat . map pretty $ altList++instance SrcInfo loc => Pretty (GuardedAlt loc) where+ pretty (GuardedAlt _pos guards body) =+ myFsep $ char '|': (punctuate comma . map pretty $ guards) ++ [text "->", pretty body]++------------------------- Statements in monads, guards & list comprehensions -----+instance SrcInfo loc => Pretty (Stmt loc) where+ pretty (Generator _loc e from) =+ pretty e <+> text "<-" <+> pretty from+ pretty (Qualifier _ e) = pretty e+ -- two cases for lets+ pretty (LetStmt _ (BDecls _ declList)) =+ ppLetStmt declList+ pretty (LetStmt _ (IPBinds _ bindList)) =+ ppLetStmt bindList+ pretty (RecStmt _ stmtList) =+ text "rec" $$$ ppBody letIndent (map pretty stmtList)++ppLetStmt l = text "let" $$$ ppBody letIndent (map pretty l)++instance SrcInfo loc => Pretty (QualStmt loc) where+ pretty (QualStmt _ s) = pretty s+ pretty (ThenTrans _ f) = myFsep $ [text "then", pretty f]+ pretty (ThenBy _ f e) = myFsep $ [text "then", pretty f, text "by", pretty e]+ pretty (GroupBy _ e) = myFsep $ [text "then", text "group", text "by", pretty e]+ pretty (GroupUsing _ f) = myFsep $ [text "then", text "group", text "using", pretty f]+ pretty (GroupByUsing _ e f) = myFsep $ [text "then", text "group", text "by",+ pretty e, text "using", pretty f]++++------------------------- Record updates+instance SrcInfo loc => Pretty (FieldUpdate loc) where+ pretty (FieldUpdate _ name e) =+ myFsep [pretty name, equals, pretty e]+ pretty (FieldPun _ name) = pretty name+ pretty (FieldWildcard _) = text ".."++------------------------- Names -------------------------+instance Pretty (QOp l) where+ pretty (QVarOp _ n) = ppQNameInfix n+ pretty (QConOp _ n) = ppQNameInfix n++ppQNameInfix :: (QName l) -> Doc+ppQNameInfix name+ | isSymbolName (getName name) = ppQName name+ | otherwise = char '`' <> ppQName name <> char '`'++instance Pretty (QName l) where+ pretty name = case name of+ UnQual _ (Symbol _ ('#':_)) -> char '(' <+> ppQName name <+> char ')'+ _ -> parensIf (isSymbolName (getName name)) (ppQName name)++ppQName :: (QName l) -> Doc+ppQName (UnQual _ name) = ppName name+ppQName (Qual _ m name) = pretty m <> char '.' <> ppName name+ppQName (Special _ sym) = text (specialName sym)++instance Pretty (Op l) where+ pretty (VarOp _ n) = ppNameInfix n+ pretty (ConOp _ n) = ppNameInfix n++ppNameInfix :: (Name l) -> Doc+ppNameInfix name+ | isSymbolName name = ppName name+ | otherwise = char '`' <> ppName name <> char '`'++instance Pretty (Name l) where+ pretty name = case name of+ Symbol _ ('#':_) -> char '(' <+> ppName name <+> char ')'+ _ -> parensIf (isSymbolName name) (ppName name)++ppName :: (Name l) -> Doc+ppName (Ident _ s) = text s+ppName (Symbol _ s) = text s++instance Pretty (IPName l) where+ pretty (IPDup _ s) = char '?' <> text s+ pretty (IPLin _ s) = char '%' <> text s++instance SrcInfo loc => Pretty (IPBind loc) where+ pretty (IPBind _loc ipname exp) =+ myFsep [pretty ipname, equals, pretty exp]++instance Pretty (CName l) where+ pretty (VarName _ n) = pretty n+ pretty (ConName _ n) = pretty n++isSymbolName :: (Name l) -> Bool+isSymbolName (Symbol _ _) = True+isSymbolName _ = False++getName :: QName l -> Name l+getName (UnQual _ s) = s+getName (Qual _ _ s) = s+getName (Special l (Cons _)) = Symbol l ":"+getName (Special l (FunCon _)) = Symbol l "->"+getName (Special l s) = Ident l (specialName s)++specialName :: SpecialCon l -> String+specialName (UnitCon _) = "()"+specialName (ListCon _) = "[]"+specialName (FunCon _) = "->"+specialName (TupleCon _ b n) = "(" ++ hash ++ replicate (n-1) ',' ++ hash ++ ")"+ where hash = case b of+ Unboxed -> "#"+ _ -> ""+specialName (Cons _) = ":"++ppContext :: Maybe (Context l) -> Doc+ppContext Nothing = empty+ppContext (Just (Context _ context)) = mySep [parenList (map pretty context), text "=>"]++-- hacked for multi-parameter type classes+instance Pretty (Asst l) where+ pretty (ClassA _ a ts) = myFsep $ ppQName a : map ppAType ts+ pretty (InfixA _ a op b) = myFsep $ [pretty a, ppQNameInfix op, pretty b]+ pretty (IParam _ i t) = myFsep $ [pretty i, text "::", pretty t]+ pretty (EqualP _ t1 t2) = myFsep $ [pretty t1, text "~", pretty t2]++------------------------- 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 :: SrcInfo s => s -> Doc -> Doc+markLine loc doc = do+ e <- getPPEnv+ let y = startLine loc+ let line l =+ text ("{-# LINE " ++ show l ++ " \"" ++ fileName loc ++ "\" #-}")+ if linePragmas e then layoutChoice (line y $$) (line (y+1) <+>) doc+ else doc++-- Pretty print a source location, useful for printing out error messages+instance Pretty SrcLoc where+ pretty srcLoc =+ return $ P.hsep [ colonFollow (P.text $ srcFilename srcLoc)+ , colonFollow (P.int $ srcLine srcLoc)+ , P.int $ srcColumn srcLoc+ ]+ where+ colonFollow p = P.hcat [ p, P.colon ]
+ src/Language/Haskell/Exts/Annotated/Syntax.hs view
@@ -0,0 +1,2118 @@+{-# LANGUAGE CPP, DeriveDataTypeable #-}+-----------------------------------------------------------------------------+-- |+-- Module : Language.Haskell.Exts.Syntax+-- Copyright : (c) Niklas Broberg 2004-2009,+-- (c) The GHC Team, 1997-2000+-- License : BSD-style (see the file LICENSE.txt)+--+-- Maintainer : Niklas Broberg, d00nibro@chalmers.se+-- Stability : stable+-- Portability : portable+--+-- A suite of datatypes describing the abstract syntax of Haskell 98+-- <http://www.haskell.org/onlinereport/> plus registered extensions, including:+--+-- * multi-parameter type classes with functional dependencies (MultiParamTypeClasses, FunctionalDependencies)+--+-- * parameters of type class assertions are unrestricted (FlexibleContexts)+--+-- * 'forall' types as universal and existential quantification (RankNTypes, ExistentialQuantification, etc)+--+-- * pattern guards (PatternGuards)+--+-- * implicit parameters (ImplicitParameters)+--+-- * generalised algebraic data types (GADTs)+--+-- * template haskell (TemplateHaskell)+--+-- * empty data type declarations (EmptyDataDecls)+--+-- * unboxed tuples (UnboxedTuples)+--+-- * regular patterns (RegularPatterns)+--+-- * HSP-style XML expressions and patterns (XmlSyntax)+--+-----------------------------------------------------------------------------++module Language.Haskell.Exts.Annotated.Syntax (+ -- * Modules+ Module(..), ModuleHead(..), WarningText(..), ExportSpecList(..), ExportSpec(..),+ ImportDecl(..), ImportSpecList(..), ImportSpec(..), Assoc(..),+ -- * Declarations+ Decl(..), Binds(..), IPBind(..),+ -- ** Type classes and instances+ ClassDecl(..), InstDecl(..), Deriving(..),+ -- ** Data type declarations+ DataOrNew(..), ConDecl(..), FieldDecl(..), QualConDecl(..), GadtDecl(..), BangType(..),+ -- ** Function bindings+ Match(..), Rhs(..), GuardedRhs(..),+ -- * Class Assertions and Contexts+ Context(..), FunDep(..), Asst(..),+ -- * Types+ Type(..), Boxed(..), Kind(..), TyVarBind(..),+ -- * Expressions+ Exp(..), Stmt(..), QualStmt(..), FieldUpdate(..),+ Alt(..), GuardedAlts(..), GuardedAlt(..), XAttr(..),+ -- * Patterns+ Pat(..), PatField(..), PXAttr(..), RPat(..), RPatOp(..),+ -- * Literals+ Literal(..),+ -- * Variables, Constructors and Operators+ ModuleName(..), QName(..), Name(..), QOp(..), Op(..),+ SpecialCon(..), CName(..), IPName(..), XName(..),++ -- * Template Haskell+ Bracket(..), Splice(..),++ -- * FFI+ Safety(..), CallConv(..),++ -- * Pragmas+ OptionPragma(..), Tool(..),+ Rule(..), RuleVar(..), Activation(..),++ -- * Builtin names++ -- ** Modules+ prelude_mod, main_mod,+ -- ** Main function of a program+ main_name,+ -- ** Constructors+ unit_con_name, tuple_con_name, list_cons_name, unboxed_singleton_con_name,+ unit_con, tuple_con, unboxed_singleton_con,+ -- ** Special identifiers+ as_name, qualified_name, hiding_name, minus_name, bang_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, unboxed_singleton_tycon_name,+ unit_tycon, fun_tycon, list_tycon, tuple_tycon, unboxed_singleton_tycon,++ -- * Source coordinates+ -- SrcLoc(..),++ -- * Annotated trees+ Annotated(..), (=~=),+ ) where+++#ifdef __GLASGOW_HASKELL__+#ifdef BASE4+import Data.Data+#else+import Data.Generics (Data(..),Typeable(..))+#endif+#endif++-- import Language.Haskell.Exts.SrcLoc+import Control.Monad.Instances -- just for Functor (,) a++{-- | 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.+data ModuleName l = ModuleName l 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 SpecialCon l+ = UnitCon l -- ^ unit type and data constructor @()@+ | ListCon l -- ^ list type constructor @[]@+ | FunCon l -- ^ function type constructor @->@+ | TupleCon l Boxed Int -- ^ /n/-ary tuple type and data+ -- constructors @(,)@ etc, possibly boxed @(\#,\#)@+ | Cons l -- ^ list data constructor @(:)@+ | UnboxedSingleCon l -- ^ unboxed singleton tuple 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 QName l+ = Qual l (ModuleName l) (Name l) -- ^ name qualified with a module name+ | UnQual l (Name l) -- ^ unqualified local name+ | Special l (SpecialCon l) -- ^ 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 Name l+ = Ident l String -- ^ /varid/ or /conid/.+ | Symbol l String -- ^ /varsym/ or /consym/+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | An implicit parameter name.+data IPName l+ = IPDup l String -- ^ ?/ident/, non-linear implicit parameter+ | IPLin l String -- ^ %/ident/, linear implicit parameter+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | Possibly qualified infix operators (/qop/), appearing in expressions.+data QOp l+ = QVarOp l (QName l) -- ^ variable operator (/qvarop/)+ | QConOp l (QName l) -- ^ constructor operator (/qconop/)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | Operators appearing in @infix@ declarations are never qualified.+data Op l+ = VarOp l (Name l) -- ^ variable operator (/varop/)+ | ConOp l (Name l) -- ^ 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 CName l+ = VarName l (Name l) -- ^ name of a method or field+ | ConName l (Name l) -- ^ name of a data constructor+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | A complete Haskell source module.+data Module l+ = Module l (Maybe (ModuleHead l)) [OptionPragma l] [ImportDecl l] [Decl l]+ -- ^ an ordinary Haskell module+ | XmlPage l [OptionPragma l] (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]+ -- ^ a module consisting of a single XML document+ | XmlHybrid l (Maybe (ModuleHead l)) [OptionPragma l] [ImportDecl l] [Decl l]+ (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]+ -- ^ a hybrid module combining an XML document with an ordinary module+#ifdef __GLASGOW_HASKELL__+ deriving (Show,Typeable,Data)+#else+ deriving (Show)+#endif++-- | The head of a module, including the name and export specification.+data ModuleHead l = ModuleHead l (ModuleName l) (Maybe (WarningText l)) (Maybe (ExportSpecList l))+#ifdef __GLASGOW_HASKELL__+ deriving (Show,Typeable,Data)+#else+ deriving (Show)+#endif++-- | An explicit export specification.+data ExportSpecList l+ = ExportSpecList l [ExportSpec l]+#ifdef __GLASGOW_HASKELL__+ deriving (Show,Typeable,Data)+#else+ deriving (Show)+#endif++-- | An item in a module's export specification.+data ExportSpec l+ = EVar l (QName l) -- ^ variable+ | EAbs l (QName l) -- ^ @T@:+ -- a class or datatype exported abstractly,+ -- or a type synonym.+ | EThingAll l (QName l) -- ^ @T(..)@:+ -- a class exported with all of its methods, or+ -- a datatype exported with all of its constructors.+ | EThingWith l (QName l) [CName l] -- ^ @T(C_1,...,C_n)@:+ -- a class exported with some of its methods, or+ -- a datatype exported with some of its constructors.+ | EModuleContents l (ModuleName l) -- ^ @module M@:+ -- re-export a module.+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An import declaration.+data ImportDecl l = ImportDecl+ { importAnn :: l -- ^ annotation, used by parser for position of the @import@ keyword.+ , importModule :: (ModuleName l) -- ^ name of the module imported.+ , importQualified :: Bool -- ^ imported @qualified@?+ , importSrc :: Bool -- ^ imported with @{-\# SOURCE \#-}@?+ , importPkg :: Maybe String -- ^ imported with explicit package name+ , importAs :: Maybe (ModuleName l) -- ^ optional alias name in an @as@ clause.+ , importSpecs :: Maybe (ImportSpecList l)+ -- ^ optional list of import specifications.+ }+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An explicit import specification list.+data ImportSpecList l+ = ImportSpecList l Bool [ImportSpec l]+ -- A 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++-- | An import specification, representing a single explicit item imported+-- (or hidden) from a module.+data ImportSpec l+ = IVar l (Name l) -- ^ variable+ | IAbs l (Name l) -- ^ @T@:+ -- the name of a class, datatype or type synonym.+ | IThingAll l (Name l) -- ^ @T(..)@:+ -- a class imported with all of its methods, or+ -- a datatype imported with all of its constructors.+ | IThingWith l (Name l) [CName l] -- ^ @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 Assoc l+ = AssocNone l -- ^ non-associative operator (declared with @infix@)+ | AssocLeft l -- ^ left-associative operator (declared with @infixl@).+ | AssocRight l -- ^ right-associative operator (declared with @infixr@)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A single derived instance, which may have arguments since it may be a MPTC.+data Deriving l = Deriving l (QName l) [Type l]+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A top-level declaration.+data Decl l+ = TypeDecl l (Name l) [TyVarBind l] (Type l)+ -- ^ A type declaration+ | TypeFamDecl l (Name l) [TyVarBind l] (Maybe (Kind l))+ -- ^ A type family declaration+ | DataDecl l (DataOrNew l) (Maybe (Context l)) (Name l) [TyVarBind l] [QualConDecl l] (Maybe [Deriving l])+ -- ^ A data OR newtype declaration+ | GDataDecl l (DataOrNew l) (Maybe (Context l)) (Name l) [TyVarBind l] (Maybe (Kind l)) [GadtDecl l] (Maybe [Deriving l])+ -- ^ A data OR newtype declaration, GADT style+ | DataFamDecl l {-data-} (Maybe (Context l)) (Name l) [TyVarBind l] (Maybe (Kind l))+ -- ^ A data family declaration+ | TypeInsDecl l (Type l) (Type l)+ -- ^ A type family instance declaration+ | DataInsDecl l (DataOrNew l) (Type l) [QualConDecl l] (Maybe [Deriving l])+ -- ^ A data family instance declaration+ | GDataInsDecl l (DataOrNew l) (Type l) (Maybe (Kind l)) [GadtDecl l] (Maybe [Deriving l])+ -- ^ A data family instance declaration, GADT style+ | ClassDecl l (Maybe (Context l)) (Name l) [TyVarBind l] [FunDep l] (Maybe [ClassDecl l])+ -- ^ A declaration of a type class+ | InstDecl l (Maybe (Context l)) (QName l) [Type l] (Maybe [InstDecl l])+ -- ^ An declaration of a type class instance+ | DerivDecl l (Maybe (Context l)) (QName l) [Type l]+ -- ^ A standalone deriving declaration+ | InfixDecl l (Assoc l) (Maybe Int) [Op l]+ -- ^ A declaration of operator fixity+ | DefaultDecl l [Type l]+ -- ^ A declaration of default types+ | SpliceDecl l (Splice l)+ -- ^ A Template Haskell splicing declaration+ | TypeSig l [Name l] (Type l)+ -- ^ A type signature declaration+ | FunBind l [Match l]+ -- ^ A set of function binding clauses+ | PatBind l (Pat l) (Maybe (Type l)) (Rhs l) {-where-} (Maybe (Binds l))+ -- ^ A pattern binding+ | ForImp l (CallConv l) (Maybe (Safety l)) String (Name l) (Type l)+ -- ^ A foreign import declaration+ | ForExp l (CallConv l) String (Name l) (Type l)+ -- ^ A foreign export declaration++ | RulePragmaDecl l [Rule l]+ -- ^ A RULES pragma+ | DeprPragmaDecl l [([Name l], String)]+ -- ^ A DEPRECATED pragma+ | WarnPragmaDecl l [([Name l], String)]+ -- ^ A WARNING pragma+ | InlineSig l Bool (Maybe (Activation l)) (QName l)+ -- ^ An INLINE pragma+ | SpecSig l (QName l) [Type l]+ -- ^ A SPECIALISE pragma+ | SpecInlineSig l Bool (Maybe (Activation l)) (QName l) [Type l]+ -- ^ A SPECIALISE INLINE pragma+ | InstSig l (Maybe (Context l)) (QName l) [Type l]+ -- ^ A SPECIALISE instance pragma+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A flag stating whether a declaration is a data or newtype declaration.+data DataOrNew l = DataType l | NewType l+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A binding group inside a @let@ or @where@ clause.+data Binds l+ = BDecls l [Decl l] -- ^ An ordinary binding group+ | IPBinds l [IPBind l] -- ^ A binding group for implicit parameters+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A binding of an implicit parameter.+data IPBind l = IPBind l (IPName l) (Exp l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Clauses of a function binding.+data Match l+ = Match l (Name l) [Pat l] (Maybe (Type l)) (Rhs l) {-where-} (Maybe (Binds l))+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A single constructor declaration within a data type declaration,+-- which may have an existential quantification binding.+data QualConDecl l+ = QualConDecl l+ {-forall-} (Maybe [TyVarBind l]) {- . -} (Maybe (Context l))+ {- => -} (ConDecl l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Declaration of an ordinary data constructor.+data ConDecl l+ = ConDecl l (Name l) [BangType l]+ -- ^ ordinary data constructor+ | InfixConDecl l (BangType l) (Name l) (BangType l)+ -- ^ infix data constructor+ | RecDecl l (Name l) [FieldDecl l]+ -- ^ record constructor+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Declaration of a (list of) named field(s).+data FieldDecl l = FieldDecl l [Name l] (BangType l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif+++-- | A single constructor declaration in a GADT data type declaration.+data GadtDecl l+ = GadtDecl l (Name l) (Type l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Declarations inside a class declaration.+data ClassDecl l+ = ClsDecl l (Decl l)+ -- ^ ordinary declaration+ | ClsDataFam l (Maybe (Context l)) (Name l) [TyVarBind l] (Maybe (Kind l))+ -- ^ declaration of an associated data type+ | ClsTyFam l (Name l) [TyVarBind l] (Maybe (Kind l))+ -- ^ declaration of an associated type synonym+ | ClsTyDef l (Type l) (Type l)+ -- ^ default choice for an associated type synonym+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Declarations inside an instance declaration.+data InstDecl l+ = InsDecl l (Decl l)+ -- ^ ordinary declaration+ | InsType l (Type l) (Type l)+ -- ^ an associated type definition+ | InsData l (DataOrNew l) (Type l) [QualConDecl l] (Maybe [Deriving l])+ -- ^ an associated data type implementation+ | InsGData l (DataOrNew l) (Type l) (Maybe (Kind l)) [GadtDecl l] (Maybe [Deriving l])+ -- ^ an associated data type implemented using GADT style+ | InsInline l Bool (Maybe (Activation l)) (QName l)+ -- ^ an INLINE pragma+#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 BangType l+ = BangedTy l (Type l) -- ^ strict component, marked with \"@!@\"+ | UnBangedTy l (Type l) -- ^ non-strict component+ | UnpackedTy l (Type l) -- ^ unboxed component, marked with an UNPACK pragma+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | The right hand side of a function or pattern binding.+data Rhs l+ = UnGuardedRhs l (Exp l) -- ^ unguarded right hand side (/exp/)+ | GuardedRhss l [GuardedRhs l]+ -- ^ guarded right hand side (/gdrhs/)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A guarded right hand side @|@ /stmts/ @=@ /exp/.+-- The guard is a series of statements when using pattern guards,+-- otherwise it will be a single qualifier expression.+data GuardedRhs l+ = GuardedRhs l [Stmt l] (Exp l)+#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 Type l+ = TyForall l+ (Maybe [TyVarBind l])+ (Maybe (Context l))+ (Type l) -- ^ qualified type+ | TyFun l (Type l) (Type l) -- ^ function type+ | TyTuple l Boxed [Type l] -- ^ tuple type, possibly boxed+ | TyList l (Type l) -- ^ list syntax, e.g. [a], as opposed to [] a+ | TyApp l (Type l) (Type l) -- ^ application of a type constructor+ | TyVar l (Name l) -- ^ type variable+ | TyCon l (QName l) -- ^ named type or type constructor+ | TyParen l (Type l) -- ^ type surrounded by parentheses+ | TyInfix l (Type l) (QName l) (Type l) -- ^ infix type constructor+ | TyKind l (Type l) (Kind l) -- ^ type with explicit kind signature+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Flag denoting whether a tuple is boxed or unboxed.+data Boxed = Boxed | Unboxed+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Ord,Show,Typeable,Data)+#else+ deriving (Eq,Ord,Show)+#endif++-- | A type variable declaration, optionally with an explicit kind annotation.+data TyVarBind l+ = KindedVar l (Name l) (Kind l) -- ^ variable binding with kind annotation+ | UnkindedVar l (Name l) -- ^ ordinary variable binding+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An explicit kind annotation.+data Kind l+ = KindStar l -- ^ @*@, the kind of types+ | KindBang l -- ^ @!@, the kind of unboxed types+ | KindFn l (Kind l) (Kind l) -- ^ @->@, the kind of a type constructor+ | KindParen l (Kind l) -- ^ a parenthesised kind+#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 FunDep l+ = FunDep l [Name l] [Name l]+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A context is a set of assertions+data Context l = Context l [Asst l]+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | 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 and equality constraints.+data Asst l+ = ClassA l (QName l) [Type l] -- ^ ordinary class assertion+ | InfixA l (Type l) (QName l) (Type l) -- ^ class assertion where the class name is given infix+ | IParam l (IPName l) (Type l) -- ^ implicit parameter assertion+ | EqualP l (Type l) (Type l) -- ^ type equality constraint+#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 Literal l+ = Char l Char -- ^ character literal+ | String l String -- ^ string literal+ | Int l Integer -- ^ integer literal+ | Frac l Rational -- ^ floating point literal+ | PrimInt l Integer -- ^ unboxed integer literal+ | PrimWord l Integer -- ^ unboxed word literal+ | PrimFloat l Rational -- ^ unboxed float literal+ | PrimDouble l Rational -- ^ unboxed double literal+ | PrimChar l Char -- ^ unboxed character literal+ | PrimString l String -- ^ unboxed string literal+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Haskell expressions.+data Exp l+ = Var l (QName l) -- ^ variable+ | IPVar l (IPName l) -- ^ implicit parameter variable+ | Con l (QName l) -- ^ data constructor+ | Lit l (Literal l) -- ^ literal constant+ | InfixApp l (Exp l) (QOp l) (Exp l) -- ^ infix application+ | App l (Exp l) (Exp l) -- ^ ordinary application+ | NegApp l (Exp l) -- ^ negation expression @-/exp/@ (unary minus)+ | Lambda l [Pat l] (Exp l) -- ^ lambda expression+ | Let l (Binds l) (Exp l) -- ^ local declarations with @let@ ... @in@ ...+ | If l (Exp l) (Exp l) (Exp l) -- ^ @if@ /exp/ @then@ /exp/ @else@ /exp/+ | Case l (Exp l) [Alt l] -- ^ @case@ /exp/ @of@ /alts/+ | Do l [Stmt l] -- ^ @do@-expression:+ -- the last statement in the list+ -- should be an expression.+ | MDo l [Stmt l] -- ^ @mdo@-expression+ | Tuple l [Exp l] -- ^ tuple expression+ | TupleSection l [Maybe (Exp l)] -- ^ tuple section expression, e.g. @(,,3)@+ | List l [Exp l] -- ^ list expression+ | Paren l (Exp l) -- ^ parenthesised expression+ | LeftSection l (Exp l) (QOp l) -- ^ left section @(@/exp/ /qop/@)@+ | RightSection l (QOp l) (Exp l) -- ^ right section @(@/qop/ /exp/@)@+ | RecConstr l (QName l) [FieldUpdate l]+ -- ^ record construction expression+ | RecUpdate l (Exp l) [FieldUpdate l]+ -- ^ record update expression+ | EnumFrom l (Exp l) -- ^ unbounded arithmetic sequence,+ -- incrementing by 1: @[from ..]@+ | EnumFromTo l (Exp l) (Exp l) -- ^ bounded arithmetic sequence,+ -- incrementing by 1 @[from .. to]@+ | EnumFromThen l (Exp l) (Exp l) -- ^ unbounded arithmetic sequence,+ -- with first two elements given @[from, then ..]@+ | EnumFromThenTo l (Exp l) (Exp l) (Exp l)+ -- ^ bounded arithmetic sequence,+ -- with first two elements given @[from, then .. to]@+ | ListComp l (Exp l) [QualStmt l] -- ^ ordinary list comprehension+ | ParComp l (Exp l) [[QualStmt l]] -- ^ parallel list comprehension+ | ExpTypeSig l (Exp l) (Type l)+ -- ^ expression with explicit type signature++ | VarQuote l (QName l) -- ^ @'x@ for template haskell reifying of expressions+ | TypQuote l (QName l) -- ^ @''T@ for template haskell reifying of types+ | BracketExp l (Bracket l) -- ^ template haskell bracket expression+ | SpliceExp l (Splice l) -- ^ template haskell splice expression+ | QuasiQuote l String String -- ^ quasi-quotaion: @[$/name/| /string/ |]@++-- Hsx+ | XTag l (XName l) [XAttr l] (Maybe (Exp l)) [Exp l]+ -- ^ xml element, with attributes and children+ | XETag l (XName l) [XAttr l] (Maybe (Exp l))+ -- ^ empty xml element, with attributes+ | XPcdata l String -- ^ PCDATA child element+ | XExpTag l (Exp l) -- ^ escaped haskell expression inside xml++-- Pragmas+ | CorePragma l String (Exp l) -- ^ CORE pragma+ | SCCPragma l String (Exp l) -- ^ SCC pragma+ | GenPragma l String (Int, Int) (Int, Int) (Exp l)+ -- ^ GENERATED pragma++-- Arrows+ | Proc l (Pat l) (Exp l) -- ^ arrows proc: @proc@ /pat/ @->@ /exp/+ | LeftArrApp l (Exp l) (Exp l) -- ^ arrow application (from left): /exp/ @-<@ /exp/+ | RightArrApp l (Exp l) (Exp l) -- ^ arrow application (from right): /exp/ @>-@ /exp/+ | LeftArrHighApp l (Exp l) (Exp l) -- ^ higher-order arrow application (from left): /exp/ @-<<@ /exp/+ | RightArrHighApp l (Exp l) (Exp l) -- ^ higher-order arrow application (from right): /exp/ @>>-@ /exp/+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | The name of an xml element or attribute,+-- possibly qualified with a namespace.+data XName l+ = XName l String -- <name ...+ | XDomName l String String -- <dom:name ...+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An xml attribute, which is a name-expression pair.+data XAttr l = XAttr l (XName l) (Exp l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A template haskell bracket expression.+data Bracket l+ = ExpBracket l (Exp l) -- ^ expression bracket: @[| ... |]@+ | PatBracket l (Pat l) -- ^ pattern bracket: @[p| ... |]@+ | TypeBracket l (Type l) -- ^ type bracket: @[t| ... |]@+ | DeclBracket l [Decl l] -- ^ declaration bracket: @[d| ... |]@+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A template haskell splice expression+data Splice l+ = IdSplice l String -- ^ variable splice: @$var@+ | ParenSplice l (Exp l) -- ^ parenthesised expression splice: @$(/exp/)@+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | The safety of a foreign function call.+data Safety l+ = PlayRisky l -- ^ unsafe+ | PlaySafe l Bool -- ^ safe ('False') or threadsafe ('True')+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | The calling convention of a foreign function call.+data CallConv l+ = StdCall l+ | CCall l+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A top level options pragma, preceding the module header.+data OptionPragma l+ = LanguagePragma l [Name l] -- ^ LANGUAGE pragma+ | IncludePragma l String -- ^ INCLUDE pragma+ | CFilesPragma l String -- ^ CFILES pragma+ | OptionsPragma l (Maybe Tool) String+ -- ^ OPTIONS pragma, possibly qualified with a tool, e.g. OPTIONS_GHC+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Recognised tools for OPTIONS pragmas.+data Tool = GHC | HUGS | NHC98 | YHC | HADDOCK | UnknownTool String+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Activation clause of a RULES pragma.+data Activation l+ = ActiveFrom l Int+ | ActiveUntil l Int+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | The body of a RULES pragma.+data Rule l+ = Rule l String (Maybe (Activation l)) (Maybe [RuleVar l]) (Exp l) (Exp l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Variables used in a RULES pragma, optionally annotated with types+data RuleVar l+ = RuleVar l (Name l)+ | TypedRuleVar l (Name l) (Type l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | Warning text to optionally use in the module header of e.g.+-- a deprecated module.+data WarningText l+ = DeprText l String+ | WarnText l String+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif+++-- | A pattern, to be matched against a value.+data Pat l+ = PVar l (Name l) -- ^ variable+ | PLit l (Literal l) -- ^ literal constant+ | PNeg l (Pat l) -- ^ negated pattern+ | PNPlusK l (Name l) Integer -- ^ n+k pattern+ | PInfixApp l (Pat l) (QName l) (Pat l)+ -- ^ pattern with an infix data constructor+ | PApp l (QName l) [Pat l] -- ^ data constructor and argument patterns+ | PTuple l [Pat l] -- ^ tuple pattern+ | PList l [Pat l] -- ^ list pattern+ | PParen l (Pat l) -- ^ parenthesized pattern+ | PRec l (QName l) [PatField l] -- ^ labelled pattern, record style+ | PAsPat l (Name l) (Pat l) -- ^ @\@@-pattern+ | PWildCard l -- ^ wildcard pattern: @_@+ | PIrrPat l (Pat l) -- ^ irrefutable pattern: @~/pat/@+ | PatTypeSig l (Pat l) (Type l) -- ^ pattern with type signature+ | PViewPat l (Exp l) (Pat l) -- ^ view patterns of the form @(/exp/ -> /pat/)@++ | PRPat l [RPat l] -- ^ regular list pattern++ | PXTag l (XName l) [PXAttr l] (Maybe (Pat l)) [Pat l]+ -- ^ XML element pattern+ | PXETag l (XName l) [PXAttr l] (Maybe (Pat l))+ -- ^ XML singleton element pattern+ | PXPcdata l String -- ^ XML PCDATA pattern+ | PXPatTag l (Pat l) -- ^ XML embedded pattern+ | PXRPats l [RPat l] -- ^ XML regular list pattern+ | PExplTypeArg l (QName l) (Type l) -- ^ Explicit generics style type argument e.g. @f {| Int |} x = ...@++ | PQuasiQuote l String String -- ^ quasi quote pattern: @[$/name/| /string/ |]@++ | PBangPat l (Pat l) -- ^ strict (bang) pattern: @f !x = ...@++#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An XML attribute in a pattern.+data PXAttr l = PXAttr l (XName l) (Pat l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A regular pattern operator.+data RPatOp l+ = RPStar l -- ^ @*@ = 0 or more+ | RPStarG l -- ^ @*!@ = 0 or more, greedy+ | RPPlus l -- ^ @+@ = 1 or more+ | RPPlusG l -- ^ @+!@ = 1 or more, greedy+ | RPOpt l -- ^ @?@ = 0 or 1+ | RPOptG l -- ^ @?!@ = 0 or 1, greedy+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An entity in a regular pattern.+data RPat l+ = RPOp l (RPat l) (RPatOp l)+ | RPEither l (RPat l) (RPat l)+ | RPSeq l [RPat l]+ | RPGuard l (Pat l) [Stmt l]+ | RPCAs l (Name l) (RPat l)+ | RPAs l (Name l) (RPat l)+ | RPParen l (RPat l)+ | RPPat l (Pat l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An /fpat/ in a labeled record pattern.+data PatField l+ = PFieldPat l (QName l) (Pat l) -- ^ ordinary label-pattern pair+ | PFieldPun l (Name l) -- ^ record field pun+ | PFieldWildcard l -- ^ record field wildcard+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A statement, representing both a /stmt/ in a @do@-expression,+-- an ordinary /qual/ in a list comprehension, as well as a /stmt/+-- in a pattern guard.+data Stmt l+ = Generator l (Pat l) (Exp l)+ -- ^ a generator: /pat/ @<-@ /exp/+ | Qualifier l (Exp l) -- ^ an /exp/ by itself: in a @do@-expression,+ -- an action whose result is discarded;+ -- in a list comprehension and pattern guard,+ -- a guard expression+ | LetStmt l (Binds l) -- ^ local bindings+ | RecStmt l [Stmt l] -- ^ a recursive binding group for arrows+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A general /transqual/ in a list comprehension,+-- which could potentially be a transform of the kind+-- enabled by TransformListComp.+data QualStmt l+ = QualStmt l (Stmt l) -- ^ an ordinary statement+ | ThenTrans l (Exp l) -- ^ @then@ /exp/+ | ThenBy l (Exp l) (Exp l) -- ^ @then@ /exp/ @by@ /exp/+ | GroupBy l (Exp l) -- ^ @then@ @group@ @by@ /exp/+ | GroupUsing l (Exp l) -- ^ @then@ @group@ @using@ /exp/+ | GroupByUsing l (Exp l) (Exp l) -- ^ @then@ @group@ @by@ /exp/ @using@ /exp/+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An /fbind/ in a labeled construction or update expression.+data FieldUpdate l+ = FieldUpdate l (QName l) (Exp l) -- ^ ordinary label-expresion pair+ | FieldPun l (Name l) -- ^ record field pun+ | FieldWildcard l -- ^ record field wildcard+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | An /alt/ alternative in a @case@ expression.+data Alt l+ = Alt l (Pat l) (GuardedAlts l) (Maybe (Binds l))+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | The right-hand sides of a @case@ alternative,+-- which may be a single right-hand side or a+-- set of guarded ones.+data GuardedAlts l+ = UnGuardedAlt l (Exp l) -- ^ @->@ /exp/+ | GuardedAlts l [GuardedAlt l] -- ^ /gdpat/+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-- | A guarded case alternative @|@ /stmts/ @->@ /exp/.+data GuardedAlt l+ = GuardedAlt l [Stmt l] (Exp l)+#ifdef __GLASGOW_HASKELL__+ deriving (Eq,Show,Typeable,Data)+#else+ deriving (Eq,Show)+#endif++-----------------------------------------------------------------------------+-- Builtin names.++prelude_mod, main_mod :: l -> ModuleName l+prelude_mod l = ModuleName l "Prelude"+main_mod l = ModuleName l "Main"++main_name :: l -> Name l+main_name l = Ident l "main"++unit_con_name :: l -> QName l+unit_con_name l = Special l (UnitCon l)++tuple_con_name :: l -> Boxed -> Int -> QName l+tuple_con_name l b i = Special l (TupleCon l b (i+1))++list_cons_name :: l -> QName l+list_cons_name l = Special l (Cons l)++unboxed_singleton_con_name :: l -> QName l+unboxed_singleton_con_name l = Special l (UnboxedSingleCon l)++unit_con :: l -> Exp l+unit_con l = Con l $ unit_con_name l++tuple_con :: l -> Boxed -> Int -> Exp l+tuple_con l b i = Con l (tuple_con_name l b i)++unboxed_singleton_con :: l -> Exp l+unboxed_singleton_con l = Con l (unboxed_singleton_con_name l)++as_name, qualified_name, hiding_name, minus_name, bang_name, dot_name, star_name :: l -> Name l+as_name l = Ident l "as"+qualified_name l = Ident l "qualified"+hiding_name l = Ident l "hiding"+minus_name l = Symbol l "-"+bang_name l = Symbol l "!"+dot_name l = Symbol l "."+star_name l = Symbol l "*"++export_name, safe_name, unsafe_name, threadsafe_name, stdcall_name, ccall_name :: l -> Name l+export_name l = Ident l "export"+safe_name l = Ident l "safe"+unsafe_name l = Ident l "unsafe"+threadsafe_name l = Ident l "threadsafe"+stdcall_name l = Ident l "stdcall"+ccall_name l = Ident l "ccall"++unit_tycon_name, fun_tycon_name, list_tycon_name, unboxed_singleton_tycon_name :: l -> QName l+unit_tycon_name l = unit_con_name l+fun_tycon_name l = Special l (FunCon l)+list_tycon_name l = Special l (ListCon l)+unboxed_singleton_tycon_name l = Special l (UnboxedSingleCon l)++tuple_tycon_name :: l -> Boxed -> Int -> QName l+tuple_tycon_name l b i = tuple_con_name l b i++unit_tycon, fun_tycon, list_tycon, unboxed_singleton_tycon :: l -> Type l+unit_tycon l = TyCon l $ unit_tycon_name l+fun_tycon l = TyCon l $ fun_tycon_name l+list_tycon l = TyCon l $ list_tycon_name l+unboxed_singleton_tycon l = TyCon l $ unboxed_singleton_tycon_name l++tuple_tycon :: l -> Boxed -> Int -> Type l+tuple_tycon l b i = TyCon l (tuple_tycon_name l b i)++-----------------------------------------------------------------------------+-- AST traversal, boiler-plate style++(=~=) :: (Functor a, Eq (a ())) => a l1 -> a l2 -> Bool+a =~= b = fmap (const ()) a == fmap (const ()) b++instance Functor ModuleName where+ fmap f (ModuleName l s) = ModuleName (f l) s++instance Functor SpecialCon where+ fmap f sc = case sc of+ UnitCon l -> UnitCon (f l)+ ListCon l -> ListCon (f l)+ FunCon l -> FunCon (f l)+ TupleCon l b n -> TupleCon (f l) b n+ Cons l -> Cons (f l)+ UnboxedSingleCon l -> UnboxedSingleCon (f l)++instance Functor QName where+ fmap f qn = case qn of+ Qual l mn n -> Qual (f l) (fmap f mn) (fmap f n)+ UnQual l n -> UnQual (f l) (fmap f n)+ Special l sc -> Special (f l) (fmap f sc)++instance Functor Name where+ fmap f (Ident l s) = Ident (f l) s+ fmap f (Symbol l s) = Symbol (f l) s++instance Functor IPName where+ fmap f (IPDup l s) = IPDup (f l) s+ fmap f (IPLin l s) = IPLin (f l) s++instance Functor QOp where+ fmap f (QVarOp l qn) = QVarOp (f l) (fmap f qn)+ fmap f (QConOp l qn) = QConOp (f l) (fmap f qn)++instance Functor Op where+ fmap f (VarOp l n) = VarOp (f l) (fmap f n)+ fmap f (ConOp l n) = ConOp (f l) (fmap f n)++instance Functor CName where+ fmap f (VarName l n) = VarName (f l) (fmap f n)+ fmap f (ConName l n) = ConName (f l) (fmap f n)++instance Functor Module where+ fmap f (Module l mmh ops iss dcls) =+ Module (f l) (fmap (fmap f) mmh) (map (fmap f) ops) (map (fmap f) iss) (map (fmap f) dcls)+ fmap f (XmlPage l os xn xas me es) =+ XmlPage (f l) (map (fmap f) os) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) (map (fmap f) es)+ fmap f (XmlHybrid l mmh ops iss dcls xn xas me es) =+ XmlHybrid (f l) (fmap (fmap f) mmh) (map (fmap f) ops) (map (fmap f) iss) (map (fmap f) dcls)+ (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) (map (fmap f) es)++instance Functor ModuleHead where+ fmap f (ModuleHead l mn mwt mexpl) =+ ModuleHead (f l) (fmap f mn) (fmap (fmap f) mwt) (fmap (fmap f) mexpl)++instance Functor ExportSpecList where+ fmap f (ExportSpecList l ess) = ExportSpecList (f l) (map (fmap f) ess)++instance Functor ExportSpec where+ fmap f es = case es of+ EVar l qn -> EVar (f l) (fmap f qn)+ EAbs l qn -> EAbs (f l) (fmap f qn)+ EThingAll l qn -> EThingAll (f l) (fmap f qn)+ EThingWith l qn cns -> EThingWith (f l) (fmap f qn) (map (fmap f) cns)+ EModuleContents l mn -> EModuleContents (f l) (fmap f mn)++instance Functor ImportDecl where+ fmap f (ImportDecl l mn qual src pkg mmn mis) =+ ImportDecl (f l) (fmap f mn) qual src pkg (fmap (fmap f) mmn) (fmap (fmap f) mis)++instance Functor ImportSpecList where+ fmap f (ImportSpecList l b iss) = ImportSpecList (f l) b (map (fmap f) iss)++instance Functor ImportSpec where+ fmap f is = case is of+ IVar l n -> IVar (f l) (fmap f n)+ IAbs l n -> IAbs (f l) (fmap f n)+ IThingAll l n -> IThingAll (f l) (fmap f n)+ IThingWith l n cns -> IThingWith (f l) (fmap f n) (map (fmap f) cns)++instance Functor Assoc where+ fmap f (AssocNone l) = AssocNone (f l)+ fmap f (AssocLeft l) = AssocLeft (f l)+ fmap f (AssocRight l) = AssocRight (f l)++instance Functor Deriving where+ fmap f (Deriving l qn ts) = Deriving (f l) (fmap f qn) (map (fmap f) ts)++instance Functor Decl where+ fmap f decl = case decl of+ TypeDecl l n tvs t -> TypeDecl (f l) (fmap f n) (map (fmap f) tvs) (fmap f t)+ TypeFamDecl l n tvs mk -> TypeFamDecl (f l) (fmap f n) (map (fmap f) tvs) (fmap (fmap f) mk)+ DataDecl l dn mcx n tvs cds ders ->+ DataDecl (f l) (fmap f dn) (fmap (fmap f) mcx) (fmap f n) (map (fmap f) tvs) (map (fmap f) cds) (fmap (map (fmap f)) ders)+ GDataDecl l dn mcx n tvs mk gds ders ->+ GDataDecl (f l) (fmap f dn) (fmap (fmap f) mcx) (fmap f n) (map (fmap f) tvs) (fmap (fmap f) mk) (map (fmap f) gds) (fmap (map (fmap f)) ders)+ DataFamDecl l mcx n tvs mk -> DataFamDecl (f l) (fmap (fmap f) mcx) (fmap f n) (map (fmap f) tvs) (fmap (fmap f) mk)+ TypeInsDecl l t1 t2 -> TypeInsDecl (f l) (fmap f t1) (fmap f t2)+ DataInsDecl l dn t cds ders -> DataInsDecl (f l) (fmap f dn) (fmap f t) (map (fmap f) cds) (fmap (map (fmap f)) ders)+ GDataInsDecl l dn t mk gds ders -> GDataInsDecl (f l) (fmap f dn) (fmap f t) (fmap (fmap f) mk) (map (fmap f) gds) (fmap (map (fmap f)) ders)+ ClassDecl l mcx n tvs fds mcds -> ClassDecl (f l) (fmap (fmap f) mcx) (fmap f n) (map (fmap f) tvs) (map (fmap f) fds) (fmap (map (fmap f)) mcds)+ InstDecl l mcx qn ts mids -> InstDecl (f l) (fmap (fmap f) mcx) (fmap f qn) (map (fmap f) ts) (fmap (map (fmap f)) mids)+ DerivDecl l mcx qn ts -> DerivDecl (f l) (fmap (fmap f) mcx) (fmap f qn) (map (fmap f) ts)+ InfixDecl l a k ops -> InfixDecl (f l) (fmap f a) k (map (fmap f) ops)+ DefaultDecl l ts -> DefaultDecl (f l) (map (fmap f) ts)+ SpliceDecl l sp -> SpliceDecl (f l) (fmap f sp)+ TypeSig l ns t -> TypeSig (f l) (map (fmap f) ns) (fmap f t)+ FunBind l ms -> FunBind (f l) (map (fmap f) ms)+ PatBind l p mt rhs bs -> PatBind (f l) (fmap f p) (fmap (fmap f) mt) (fmap f rhs) (fmap (fmap f) bs)+ ForImp l cc msf s n t -> ForImp (f l) (fmap f cc) (fmap (fmap f) msf) s (fmap f n) (fmap f t)+ ForExp l cc s n t -> ForExp (f l) (fmap f cc) s (fmap f n) (fmap f t)+ RulePragmaDecl l rs -> RulePragmaDecl (f l) (map (fmap f) rs)+ DeprPragmaDecl l nss -> DeprPragmaDecl (f l) (map (wp f) nss)+ WarnPragmaDecl l nss -> WarnPragmaDecl (f l) (map (wp f) nss)+ InlineSig l b mact qn -> InlineSig (f l) b (fmap (fmap f) mact) (fmap f qn)+ SpecInlineSig l b mact qn ts -> SpecInlineSig (f l) b (fmap (fmap f) mact) (fmap f qn) (map (fmap f) ts)+ SpecSig l qn ts -> SpecSig (f l) (fmap f qn) (map (fmap f) ts)+ InstSig l mcx qn ts -> InstSig (f l) (fmap (fmap f) mcx) (fmap f qn) (map (fmap f) ts)+ where wp f (ns, s) = (map (fmap f) ns, s)++instance Functor DataOrNew where+ fmap f (DataType l) = DataType (f l)+ fmap f (NewType l) = NewType (f l)++instance Functor Binds where+ fmap f (BDecls l decls) = BDecls (f l) (map (fmap f) decls)+ fmap f (IPBinds l ibs) = IPBinds (f l) (map (fmap f) ibs)++instance Functor IPBind where+ fmap f (IPBind l ipn e) = IPBind (f l) (fmap f ipn) (fmap f e)++instance Functor Match where+ fmap f (Match l n ps mt rhs bs) =+ Match (f l) (fmap f n) (map (fmap f) ps) (fmap (fmap f) mt) (fmap f rhs) (fmap (fmap f) bs)++instance Functor QualConDecl where+ fmap f (QualConDecl l mtvs mcx cd) = QualConDecl (f l) (fmap (map (fmap f)) mtvs) (fmap (fmap f) mcx) (fmap f cd)++instance Functor ConDecl where+ fmap f (ConDecl l n bts) = ConDecl (f l) (fmap f n) (map (fmap f) bts)+ fmap f (InfixConDecl l ta n tb) = InfixConDecl (f l) (fmap f ta) (fmap f n) (fmap f tb)+ fmap f (RecDecl l n fds) = RecDecl (f l) (fmap f n) (map (fmap f) fds)++instance Functor FieldDecl where+ fmap f (FieldDecl l ns t) = FieldDecl (f l) (map (fmap f) ns) (fmap f t)++instance Functor GadtDecl where+ fmap f (GadtDecl l n t) = GadtDecl (f l) (fmap f n) (fmap f t)++instance Functor ClassDecl where+ fmap f (ClsDecl l d) = ClsDecl (f l) (fmap f d)+ fmap f (ClsDataFam l mcx n tvs mk) = ClsDataFam (f l) (fmap (fmap f) mcx) (fmap f n) (map (fmap f) tvs) (fmap (fmap f) mk)+ fmap f (ClsTyFam l n tvs mk) = ClsTyFam (f l) (fmap f n) (map (fmap f) tvs) (fmap (fmap f) mk)+ fmap f (ClsTyDef l t1 t2) = ClsTyDef (f l) (fmap f t1) (fmap f t2)++instance Functor InstDecl where+ fmap f id = case id of+ InsDecl l d -> InsDecl (f l) (fmap f d)+ InsType l t1 t2 -> InsType (f l) (fmap f t1) (fmap f t2)+ InsData l dn t cds ders+ -> InsData (f l) (fmap f dn) (fmap f t) (map (fmap f) cds) (fmap (map (fmap f)) ders)+ InsGData l dn t mk gds ders+ -> InsGData (f l) (fmap f dn) (fmap f t) (fmap (fmap f) mk) (map (fmap f) gds) (fmap (map (fmap f)) ders)+ InsInline l b mact qn -> InsInline (f l) b (fmap (fmap f) mact) (fmap f qn)++instance Functor BangType where+ fmap f (BangedTy l t) = BangedTy (f l) (fmap f t)+ fmap f (UnBangedTy l t) = UnBangedTy (f l) (fmap f t)+ fmap f (UnpackedTy l t) = UnpackedTy (f l) (fmap f t)++instance Functor Rhs where+ fmap f (UnGuardedRhs l e) = UnGuardedRhs (f l) (fmap f e)+ fmap f (GuardedRhss l grhss) = GuardedRhss (f l) (map (fmap f) grhss)++instance Functor GuardedRhs where+ fmap f (GuardedRhs l ss e) = GuardedRhs (f l) (map (fmap f) ss) (fmap f e)++instance Functor Type where+ fmap f t = case t of+ TyForall l mtvs mcx t -> TyForall (f l) (fmap (map (fmap f)) mtvs) (fmap (fmap f) mcx) (fmap f t)+ TyFun l t1 t2 -> TyFun (f l) (fmap f t1) (fmap f t2)+ TyTuple l b ts -> TyTuple (f l) b (map (fmap f) ts)+ TyList l t -> TyList (f l) (fmap f t)+ TyApp l t1 t2 -> TyApp (f l) (fmap f t1) (fmap f t2)+ TyVar l n -> TyVar (f l) (fmap f n)+ TyCon l qn -> TyCon (f l) (fmap f qn)+ TyParen l t -> TyParen (f l) (fmap f t)+ TyInfix l ta qn tb -> TyInfix (f l) (fmap f ta) (fmap f qn) (fmap f tb)+ TyKind l t k -> TyKind (f l) (fmap f t) (fmap f k)++instance Functor TyVarBind where+ fmap f (KindedVar l n k) = KindedVar (f l) (fmap f n) (fmap f k)+ fmap f (UnkindedVar l n) = UnkindedVar (f l) (fmap f n)++instance Functor Kind where+ fmap f (KindStar l) = KindStar (f l)+ fmap f (KindBang l) = KindBang (f l)+ fmap f (KindFn l k1 k2) = KindFn (f l) (fmap f k1) (fmap f k2)++instance Functor FunDep where+ fmap f (FunDep l ns1 ns2) = FunDep (f l) (map (fmap f) ns1) (map (fmap f) ns2)++instance Functor Context where+ fmap f (Context l assts) = Context (f l) (map (fmap f) assts)++instance Functor Asst where+ fmap f asst = case asst of+ ClassA l qn ts -> ClassA (f l) (fmap f qn) (map (fmap f) ts)+ InfixA l ta qn tb -> InfixA (f l) (fmap f ta) (fmap f qn) (fmap f tb)+ IParam l ipn t -> IParam (f l) (fmap f ipn) (fmap f t)+ EqualP l t1 t2 -> EqualP (f l) (fmap f t1) (fmap f t2)++instance Functor Literal where+ fmap f lit = case lit of+ Char l c -> Char (f l) c+ String l s -> String (f l) s+ Int l i -> Int (f l) i+ Frac l r -> Frac (f l) r+ PrimInt l i -> PrimInt (f l) i+ PrimWord l i -> PrimWord (f l) i+ PrimFloat l r -> PrimFloat (f l) r+ PrimDouble l r -> PrimDouble (f l) r+ PrimChar l c -> PrimChar (f l) c+ PrimString l s -> PrimString (f l) s++instance Functor Exp where+ fmap f e = case e of+ Var l qn -> Var (f l) (fmap f qn)+ IPVar l ipn -> IPVar (f l) (fmap f ipn)+ Con l qn -> Con (f l) (fmap f qn)+ Lit l lit -> Lit (f l) (fmap f lit)+ InfixApp l e1 qop e2 -> InfixApp (f l) (fmap f e1) (fmap f qop) (fmap f e2)+ App l e1 e2 -> App (f l) (fmap f e1) (fmap f e2)+ NegApp l e -> NegApp (f l) (fmap f e)+ Lambda l ps e -> Lambda (f l) (map (fmap f) ps) (fmap f e)+ Let l bs e -> Let (f l) (fmap f bs) (fmap f e)+ If l ec et ee -> If (f l) (fmap f ec) (fmap f et) (fmap f ee)+ Case l e alts -> Case (f l) (fmap f e) (map (fmap f) alts)+ Do l ss -> Do (f l) (map (fmap f) ss)+ MDo l ss -> MDo (f l) (map (fmap f) ss)+ Tuple l es -> Tuple (f l) (map (fmap f) es)+ TupleSection l mes -> TupleSection (f l) (map (fmap (fmap f)) mes)+ List l es -> List (f l) (map (fmap f) es)+ Paren l e -> Paren (f l) (fmap f e)+ LeftSection l e qop -> LeftSection (f l) (fmap f e) (fmap f qop)+ RightSection l qop e -> RightSection (f l) (fmap f qop) (fmap f e)+ RecConstr l qn fups -> RecConstr (f l) (fmap f qn) (map (fmap f) fups)+ RecUpdate l e fups -> RecUpdate (f l) (fmap f e) (map (fmap f) fups)+ EnumFrom l e -> EnumFrom (f l) (fmap f e)+ EnumFromTo l ef et -> EnumFromTo (f l) (fmap f ef) (fmap f et)+ EnumFromThen l ef et -> EnumFromThen (f l) (fmap f ef) (fmap f et)+ EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) (fmap f ef) (fmap f eth) (fmap f eto)+ ListComp l e qss -> ListComp (f l) (fmap f e) (map (fmap f) qss)+ ParComp l e qsss -> ParComp (f l) (fmap f e) (map (map (fmap f)) qsss)+ ExpTypeSig l e t -> ExpTypeSig (f l) (fmap f e) (fmap f t)+ VarQuote l qn -> VarQuote (f l) (fmap f qn)+ TypQuote l qn -> TypQuote (f l) (fmap f qn)+ BracketExp l br -> BracketExp (f l) (fmap f br)+ SpliceExp l sp -> SpliceExp (f l) (fmap f sp)+ QuasiQuote l sn se -> QuasiQuote (f l) sn se++ XTag l xn xas me es -> XTag (f l) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me) (map (fmap f) es)+ XETag l xn xas me -> XETag (f l) (fmap f xn) (map (fmap f) xas) (fmap (fmap f) me)+ XPcdata l s -> XPcdata (f l) s+ XExpTag l e -> XExpTag (f l) (fmap f e)++ CorePragma l s e -> CorePragma (f l) s (fmap f e)+ SCCPragma l s e -> SCCPragma (f l) s (fmap f e)+ GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 (fmap f e)++ Proc l p e -> Proc (f l) (fmap f p) (fmap f e)+ LeftArrApp l e1 e2 -> LeftArrApp (f l) (fmap f e1) (fmap f e2)+ RightArrApp l e1 e2 -> RightArrApp (f l) (fmap f e1) (fmap f e2)+ LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) (fmap f e1) (fmap f e2)+ RightArrHighApp l e1 e2 -> RightArrHighApp (f l) (fmap f e1) (fmap f e2)++instance Functor XName where+ fmap f (XName l s) = XName (f l) s+ fmap f (XDomName l sd sn) = XDomName (f l) sd sn++instance Functor XAttr where+ fmap f (XAttr l xn e) = XAttr (f l) (fmap f xn) (fmap f e)++instance Functor Bracket where+ fmap f (ExpBracket l e) = ExpBracket (f l) (fmap f e)+ fmap f (PatBracket l p) = PatBracket (f l) (fmap f p)+ fmap f (TypeBracket l t) = TypeBracket (f l) (fmap f t)+ fmap f (DeclBracket l ds) = DeclBracket (f l) (map (fmap f) ds)++instance Functor Splice where+ fmap f (IdSplice l s) = IdSplice (f l) s+ fmap f (ParenSplice l e) = ParenSplice (f l) (fmap f e)++instance Functor Safety where+ fmap f (PlayRisky l) = PlayRisky (f l)+ fmap f (PlaySafe l b) = PlaySafe (f l) b++instance Functor CallConv where+ fmap f (StdCall l) = StdCall (f l)+ fmap f (CCall l) = CCall (f l)++instance Functor OptionPragma where+ fmap f (LanguagePragma l ns) = LanguagePragma (f l) (map (fmap f) ns)+ fmap f (IncludePragma l s) = IncludePragma (f l) s+ fmap f (CFilesPragma l s) = CFilesPragma (f l) s+ fmap f (OptionsPragma l mt s) = OptionsPragma (f l) mt s++instance Functor Activation where+ fmap f (ActiveFrom l k) = ActiveFrom (f l) k+ fmap f (ActiveUntil l k) = ActiveUntil (f l) k++instance Functor Rule where+ fmap f (Rule l s mact mrvs e1 e2) =+ Rule (f l) s (fmap (fmap f) mact) (fmap (map (fmap f)) mrvs) (fmap f e1) (fmap f e2)++instance Functor RuleVar where+ fmap f (RuleVar l n) = RuleVar (f l) (fmap f n)+ fmap f (TypedRuleVar l n t) = TypedRuleVar (f l) (fmap f n) (fmap f t)++instance Functor WarningText where+ fmap f (DeprText l s) = DeprText (f l) s+ fmap f (WarnText l s) = WarnText (f l) s++instance Functor Pat where+ fmap f p = case p of+ PVar l n -> PVar (f l) (fmap f n)+ PLit l lit -> PLit (f l) (fmap f lit)+ PNeg l p -> PNeg (f l) (fmap f p)+ PNPlusK l n k -> PNPlusK (f l) (fmap f n) k+ PInfixApp l pa qn pb -> PInfixApp (f l) (fmap f pa) (fmap f qn) (fmap f pb)+ PApp l qn ps -> PApp (f l) (fmap f qn) (map (fmap f) ps)+ PTuple l ps -> PTuple (f l) (map (fmap f) ps)+ PList l ps -> PList (f l) (map (fmap f) ps)+ PParen l p -> PParen (f l) (fmap f p)+ PRec l qn pfs -> PRec (f l) (fmap f qn) (map (fmap f) pfs)+ PAsPat l n p -> PAsPat (f l) (fmap f n) (fmap f p)+ PWildCard l -> PWildCard (f l)+ PIrrPat l p -> PIrrPat (f l) (fmap f p)+ PatTypeSig l p t -> PatTypeSig (f l) (fmap f p) (fmap f t)+ PViewPat l e p -> PViewPat (f l) (fmap f e) (fmap f p)+ PRPat l rps -> PRPat (f l) (map (fmap f) rps)+ PXTag l xn pxas mp ps -> PXTag (f l) (fmap f xn) (map (fmap f) pxas) (fmap (fmap f) mp) (map (fmap f) ps)+ PXETag l xn pxas mp -> PXETag (f l) (fmap f xn) (map (fmap f) pxas) (fmap (fmap f) mp)+ PXPcdata l s -> PXPcdata (f l) s+ PXPatTag l p -> PXPatTag (f l) (fmap f p)+ PXRPats l rps -> PXRPats (f l) (map (fmap f) rps)+ PExplTypeArg l qn t -> PExplTypeArg (f l) (fmap f qn) (fmap f t)+ PQuasiQuote l sn st -> PQuasiQuote (f l) sn st+ PBangPat l p -> PBangPat (f l) (fmap f p)++instance Functor PXAttr where+ fmap f (PXAttr l xn p) = PXAttr (f l) (fmap f xn) (fmap f p)++instance Functor RPatOp where+ fmap f (RPStar l) = RPStar (f l)+ fmap f (RPStarG l) = RPStarG (f l)+ fmap f (RPPlus l) = RPPlus (f l)+ fmap f (RPPlusG l) = RPPlusG (f l)+ fmap f (RPOpt l) = RPOpt (f l)+ fmap f (RPOptG l) = RPOptG (f l)++instance Functor RPat where+ fmap f rp = case rp of+ RPOp l rp rop -> RPOp (f l) (fmap f rp) (fmap f rop)+ RPEither l rp1 rp2 -> RPEither (f l) (fmap f rp1) (fmap f rp2)+ RPSeq l rps -> RPSeq (f l) (map (fmap f) rps)+ RPGuard l p ss -> RPGuard (f l) (fmap f p) (map (fmap f) ss)+ RPCAs l n rp -> RPCAs (f l) (fmap f n) (fmap f rp)+ RPAs l n rp -> RPAs (f l) (fmap f n) (fmap f rp)+ RPParen l rp -> RPParen (f l) (fmap f rp)+ RPPat l p -> RPPat (f l) (fmap f p)++instance Functor PatField where+ fmap f (PFieldPat l qn p) = PFieldPat (f l) (fmap f qn) (fmap f p)+ fmap f (PFieldPun l n) = PFieldPun (f l) (fmap f n)+ fmap f (PFieldWildcard l) = PFieldWildcard (f l)++instance Functor Stmt where+ fmap f (Generator l p e) = Generator (f l) (fmap f p) (fmap f e)+ fmap f (Qualifier l e) = Qualifier (f l) (fmap f e)+ fmap f (LetStmt l bs) = LetStmt (f l) (fmap f bs)+ fmap f (RecStmt l ss) = RecStmt (f l) (map (fmap f) ss)++instance Functor QualStmt where+ fmap f (QualStmt l s) = QualStmt (f l) (fmap f s)+ fmap f (ThenTrans l e) = ThenTrans (f l) (fmap f e)+ fmap f (ThenBy l e1 e2) = ThenBy (f l) (fmap f e1) (fmap f e2)+ fmap f (GroupBy l e) = GroupBy (f l) (fmap f e)+ fmap f (GroupUsing l e) = GroupUsing (f l) (fmap f e)+ fmap f (GroupByUsing l e1 e2) = GroupByUsing (f l) (fmap f e1) (fmap f e2)++instance Functor FieldUpdate where+ fmap f (FieldUpdate l qn e) = FieldUpdate (f l) (fmap f qn) (fmap f e)+ fmap f (FieldPun l n) = FieldPun (f l) (fmap f n)+ fmap f (FieldWildcard l) = FieldWildcard (f l)++instance Functor Alt where+ fmap f (Alt l p gs bs) = Alt (f l) (fmap f p) (fmap f gs) (fmap (fmap f) bs)++instance Functor GuardedAlts where+ fmap f (UnGuardedAlt l e) = UnGuardedAlt (f l) (fmap f e)+ fmap f (GuardedAlts l galts) = GuardedAlts (f l) (map (fmap f) galts)++instance Functor GuardedAlt where+ fmap f (GuardedAlt l ss e) = GuardedAlt (f l) (map (fmap f) ss) (fmap f e)++-----------------------------------------------------------------------------+-- Reading annotations++class Annotated ast where+ ann :: ast l -> l+ amap :: (l -> l) -> ast l -> ast l++instance Annotated ModuleName where+ ann (ModuleName l _) = l+ amap f (ModuleName l n) = ModuleName (f l) n++instance Annotated SpecialCon where+ ann sc = case sc of+ UnitCon l -> l+ ListCon l -> l+ FunCon l -> l+ TupleCon l _ _ -> l+ Cons l -> l+ UnboxedSingleCon l -> l+ amap = fmap++instance Annotated QName where+ ann qn = case qn of+ Qual l mn n -> l+ UnQual l n -> l+ Special l sc -> l+ amap f qn = case qn of+ Qual l mn n -> Qual (f l) mn n+ UnQual l n -> UnQual (f l) n+ Special l sc -> Special (f l) sc++instance Annotated Name where+ ann (Ident l s) = l+ ann (Symbol l s) = l+ amap = fmap++instance Annotated IPName where+ ann (IPDup l s) = l+ ann (IPLin l s) = l+ amap = fmap++instance Annotated QOp where+ ann (QVarOp l qn) = l+ ann (QConOp l qn) = l+ amap f (QVarOp l qn) = QVarOp (f l) qn+ amap f (QConOp l qn) = QConOp (f l) qn++instance Annotated Op where+ ann (VarOp l n) = l+ ann (ConOp l n) = l+ amap f (VarOp l n) = VarOp (f l) n+ amap f (ConOp l n) = ConOp (f l) n++instance Annotated CName where+ ann (VarName l n) = l+ ann (ConName l n) = l+ amap f (VarName l n) = VarName (f l) n+ amap f (ConName l n) = ConName (f l) n++instance Annotated Module where+ ann (Module l mmh ops iss dcls) = l+ ann (XmlPage l os xn xas me es) = l+ ann (XmlHybrid l mmh ops iss dcls xn xas me es) = l++ amap f (Module l mmh ops iss dcls) =+ Module (f l) mmh ops iss dcls+ amap f (XmlPage l os xn xas me es) =+ XmlPage (f l) os xn xas me es+ amap f (XmlHybrid l mmh ops iss dcls xn xas me es) =+ XmlHybrid (f l) mmh ops iss dcls xn xas me es++instance Annotated ModuleHead where+ ann (ModuleHead l n mwt mesl) = l+ amap f (ModuleHead l n mwt mesl) = ModuleHead (f l) n mwt mesl++instance Annotated ExportSpecList where+ ann (ExportSpecList l ess) = l+ amap f (ExportSpecList l ess) = ExportSpecList (f l) ess++instance Annotated ExportSpec where+ ann es = case es of+ EVar l qn -> l+ EAbs l qn -> l+ EThingAll l qn -> l+ EThingWith l qn cns -> l+ EModuleContents l mn -> l+ amap f es = case es of+ EVar l qn -> EVar (f l) qn+ EAbs l qn -> EAbs (f l) qn+ EThingAll l qn -> EThingAll (f l) qn+ EThingWith l qn cns -> EThingWith (f l) qn cns+ EModuleContents l mn -> EModuleContents (f l) mn++instance Annotated ImportDecl where+ ann (ImportDecl l mn qual src pkg mmn mis) = l+ amap f (ImportDecl l mn qual src pkg mmn mis) =+ ImportDecl (f l) mn qual src pkg mmn mis++instance Annotated ImportSpecList where+ ann (ImportSpecList l b iss) = l+ amap f (ImportSpecList l b iss) = ImportSpecList (f l) b iss++instance Annotated ImportSpec where+ ann is = case is of+ IVar l n -> l+ IAbs l n -> l+ IThingAll l n -> l+ IThingWith l n cns -> l+ amap f is = case is of+ IVar l n -> IVar (f l) n+ IAbs l n -> IAbs (f l) n+ IThingAll l n -> IThingAll (f l) n+ IThingWith l n cns -> IThingWith (f l) n cns++instance Annotated Assoc where+ ann (AssocNone l) = l+ ann (AssocLeft l) = l+ ann (AssocRight l) = l+ amap = fmap++instance Annotated Deriving where+ ann (Deriving l qn ts) = l+ amap f (Deriving l qn ts) = Deriving (f l) qn ts++instance Annotated Decl where+ ann decl = case decl of+ TypeDecl l n tvs t -> l+ TypeFamDecl l n tvs mk -> l+ DataDecl l dn cx n tvs cds ders -> l+ GDataDecl l dn cx n tvs mk gds ders -> l+ DataFamDecl l cx n tvs mk -> l+ TypeInsDecl l t1 t2 -> l+ DataInsDecl l dn t cds ders -> l+ GDataInsDecl l dn t mk gds ders -> l+ ClassDecl l cx n tvs fds cds -> l+ InstDecl l cx qn ts ids -> l+ DerivDecl l cx qn ts -> l+ InfixDecl l a k ops -> l+ DefaultDecl l ts -> l+ SpliceDecl l sp -> l+ TypeSig l ns t -> l+ FunBind l ms -> l+ PatBind l p mt rhs bs -> l+ ForImp l cc msf s n t -> l+ ForExp l cc s n t -> l+ RulePragmaDecl l rs -> l+ DeprPragmaDecl l nss -> l+ WarnPragmaDecl l nss -> l+ InlineSig l b act qn -> l+ SpecSig l qn ts -> l+ SpecInlineSig l b act qn ts -> l+ InstSig l cx qn ts -> l+ amap f decl = case decl of+ TypeDecl l n tvs t -> TypeDecl (f l) n tvs t+ TypeFamDecl l n tvs mk -> TypeFamDecl (f l) n tvs mk+ DataDecl l dn mcx n tvs cds ders ->+ DataDecl (f l) dn mcx n tvs cds ders+ GDataDecl l dn mcx n tvs mk gds ders ->+ GDataDecl (f l) dn mcx n tvs mk gds ders+ DataFamDecl l mcx n tvs mk -> DataFamDecl (f l) mcx n tvs mk+ TypeInsDecl l t1 t2 -> TypeInsDecl (f l) t1 t2+ DataInsDecl l dn t cds ders -> DataInsDecl (f l) dn t cds ders+ GDataInsDecl l dn t mk gds ders -> GDataInsDecl (f l) dn t mk gds ders+ ClassDecl l mcx n tvs fds cds -> ClassDecl (f l) mcx n tvs fds cds+ InstDecl l mcx qn ts ids -> InstDecl (f l) mcx qn ts ids+ DerivDecl l mcx qn ts -> DerivDecl (f l) mcx qn ts+ InfixDecl l a k ops -> InfixDecl (f l) a k ops+ DefaultDecl l ts -> DefaultDecl (f l) ts+ SpliceDecl l sp -> SpliceDecl (f l) sp+ TypeSig l ns t -> TypeSig (f l) ns t+ FunBind l ms -> FunBind (f l) ms+ PatBind l p mt rhs bs -> PatBind (f l) p mt rhs bs+ ForImp l cc msf s n t -> ForImp (f l) cc msf s n t+ ForExp l cc s n t -> ForExp (f l) cc s n t+ RulePragmaDecl l rs -> RulePragmaDecl (f l) rs+ DeprPragmaDecl l nss -> DeprPragmaDecl (f l) nss+ WarnPragmaDecl l nss -> WarnPragmaDecl (f l) nss+ InlineSig l b act qn -> InlineSig (f l) b act qn+ SpecSig l qn ts -> SpecSig (f l) qn ts+ SpecInlineSig l b act qn ts -> SpecInlineSig (f l) b act qn ts+ InstSig l mcx qn ts -> InstSig (f l) mcx qn ts++instance Annotated DataOrNew where+ ann (DataType l) = l+ ann (NewType l) = l+ amap = fmap++instance Annotated Binds where+ ann (BDecls l decls) = l+ ann (IPBinds l ibs) = l+ amap f (BDecls l decls) = BDecls (f l) decls+ amap f (IPBinds l ibs) = IPBinds (f l) ibs++instance Annotated IPBind where+ ann (IPBind l ipn e) = l+ amap f (IPBind l ipn e) = IPBind (f l) ipn e++instance Annotated Match where+ ann (Match l n ps mt rhs bs) = l+ amap f (Match l n ps mt rhs bs) = Match (f l) n ps mt rhs bs++instance Annotated QualConDecl where+ ann (QualConDecl l tvs cx cd) = l+ amap f (QualConDecl l tvs cx cd) = QualConDecl (f l) tvs cx cd++instance Annotated ConDecl where+ ann (ConDecl l n bts) = l+ ann (InfixConDecl l ta n tb) = l+ ann (RecDecl l n nsbts) = l+ amap f (ConDecl l n bts) = ConDecl (f l) n bts+ amap f (InfixConDecl l ta n tb) = InfixConDecl (f l) ta n tb+ amap f (RecDecl l n fds) = RecDecl (f l) n fds++instance Annotated FieldDecl where+ ann (FieldDecl l ns t) = l+ amap f (FieldDecl l ns t) = FieldDecl (f l) ns t++instance Annotated GadtDecl where+ ann (GadtDecl l n t) = l+ amap f (GadtDecl l n t) = GadtDecl (f l) n t++instance Annotated ClassDecl where+ ann (ClsDecl l d) = l+ ann (ClsDataFam l cx n tvs mk) = l+ ann (ClsTyFam l n tvs mk) = l+ ann (ClsTyDef l t1 t2) = l+ amap f (ClsDecl l d) = ClsDecl (f l) d+ amap f (ClsDataFam l mcx n tvs mk) = ClsDataFam (f l) mcx n tvs mk+ amap f (ClsTyFam l n tvs mk) = ClsTyFam (f l) n tvs mk+ amap f (ClsTyDef l t1 t2) = ClsTyDef (f l) t1 t2++instance Annotated InstDecl where+ ann id = case id of+ InsDecl l d -> l+ InsType l t1 t2 -> l+ InsData l dn t cds ders -> l+ InsGData l dn t mk gds ders -> l+ InsInline l b act qn -> l+ amap f id = case id of+ InsDecl l d -> InsDecl (f l) d+ InsType l t1 t2 -> InsType (f l) t1 t2+ InsData l dn t cds ders -> InsData (f l) dn t cds ders+ InsGData l dn t mk gds ders -> InsGData (f l) dn t mk gds ders+ InsInline l b act qn -> InsInline (f l) b act qn++instance Annotated BangType where+ ann (BangedTy l t) = l+ ann (UnBangedTy l t) = l+ ann (UnpackedTy l t) = l+ amap f (BangedTy l t) = BangedTy (f l) t+ amap f (UnBangedTy l t) = UnBangedTy (f l) t+ amap f (UnpackedTy l t) = UnpackedTy (f l) t++instance Annotated Rhs where+ ann (UnGuardedRhs l e) = l+ ann (GuardedRhss l grhss) = l+ amap f (UnGuardedRhs l e) = UnGuardedRhs (f l) e+ amap f (GuardedRhss l grhss) = GuardedRhss (f l) grhss++instance Annotated GuardedRhs where+ ann (GuardedRhs l ss e) = l+ amap f (GuardedRhs l ss e) = GuardedRhs (f l) ss e++instance Annotated Type where+ ann t = case t of+ TyForall l mtvs cx t -> l+ TyFun l t1 t2 -> l+ TyTuple l b ts -> l+ TyList l t -> l+ TyApp l t1 t2 -> l+ TyVar l n -> l+ TyCon l qn -> l+ TyParen l t -> l+ TyInfix l ta qn tb -> l+ TyKind l t k -> l+ amap f t = case t of+ TyForall l mtvs mcx t -> TyForall (f l) mtvs mcx t+ TyFun l t1 t2 -> TyFun (f l) t1 t2+ TyTuple l b ts -> TyTuple (f l) b ts+ TyList l t -> TyList (f l) t+ TyApp l t1 t2 -> TyApp (f l) t1 t2+ TyVar l n -> TyVar (f l) n+ TyCon l qn -> TyCon (f l) qn+ TyParen l t -> TyParen (f l) t+ TyInfix l ta qn tb -> TyInfix (f l) ta qn tb+ TyKind l t k -> TyKind (f l) t k++instance Annotated TyVarBind where+ ann (KindedVar l n k) = l+ ann (UnkindedVar l n) = l+ amap f (KindedVar l n k) = KindedVar (f l) n k+ amap f (UnkindedVar l n) = UnkindedVar (f l) n++instance Annotated Kind where+ ann (KindStar l) = l+ ann (KindBang l) = l+ ann (KindFn l k1 k2) = l+ amap f (KindStar l) = KindStar (f l)+ amap f (KindBang l) = KindBang (f l)+ amap f (KindFn l k1 k2) = KindFn (f l) k1 k2++instance Annotated FunDep where+ ann (FunDep l ns1 ns2) = l+ amap f (FunDep l ns1 ns2) = FunDep (f l) ns1 ns2++instance Annotated Context where+ ann (Context l assts) = l+ amap f (Context l assts) = Context (f l) assts++instance Annotated Asst where+ ann asst = case asst of+ ClassA l qn ts -> l+ InfixA l ta qn tb -> l+ IParam l ipn t -> l+ EqualP l t1 t2 -> l+ amap f asst = case asst of+ ClassA l qn ts -> ClassA (f l) qn ts+ InfixA l ta qn tb -> InfixA (f l) ta qn tb+ IParam l ipn t -> IParam (f l) ipn t+ EqualP l t1 t2 -> EqualP (f l) t1 t2++instance Annotated Literal where+ ann lit = case lit of+ Char l c -> l+ String l s -> l+ Int l i -> l+ Frac l r -> l+ PrimInt l i -> l+ PrimWord l i -> l+ PrimFloat l r -> l+ PrimDouble l r -> l+ PrimChar l c -> l+ PrimString l s -> l+ amap = fmap++instance Annotated Exp where+ ann e = case e of+ Var l qn -> l+ IPVar l ipn -> l+ Con l qn -> l+ Lit l lit -> l+ InfixApp l e1 qop e2 -> l+ App l e1 e2 -> l+ NegApp l e -> l+ Lambda l ps e -> l+ Let l bs e -> l+ If l ec et ee -> l+ Case l e alts -> l+ Do l ss -> l+ MDo l ss -> l+ Tuple l es -> l+ TupleSection l mes -> l+ List l es -> l+ Paren l e -> l+ LeftSection l e qop -> l+ RightSection l qop e -> l+ RecConstr l qn fups -> l+ RecUpdate l e fups -> l+ EnumFrom l e -> l+ EnumFromTo l ef et -> l+ EnumFromThen l ef et -> l+ EnumFromThenTo l ef eth eto -> l+ ListComp l e qss -> l+ ParComp l e qsss -> l+ ExpTypeSig l e t -> l+ VarQuote l qn -> l+ TypQuote l qn -> l+ BracketExp l br -> l+ SpliceExp l sp -> l+ QuasiQuote l sn se -> l++ XTag l xn xas me es -> l+ XETag l xn xas me -> l+ XPcdata l s -> l+ XExpTag l e -> l++ CorePragma l s e -> l+ SCCPragma l s e -> l+ GenPragma l s n12 n34 e -> l++ Proc l p e -> l+ LeftArrApp l e1 e2 -> l+ RightArrApp l e1 e2 -> l+ LeftArrHighApp l e1 e2 -> l+ RightArrHighApp l e1 e2 -> l++ amap f e = case e of+ Var l qn -> Var (f l) qn+ IPVar l ipn -> IPVar (f l) ipn+ Con l qn -> Con (f l) qn+ Lit l lit -> Lit (f l) lit+ InfixApp l e1 qop e2 -> InfixApp (f l) e1 qop e2+ App l e1 e2 -> App (f l) e1 e2+ NegApp l e -> NegApp (f l) e+ Lambda l ps e -> Lambda (f l) ps e+ Let l bs e -> Let (f l) bs e+ If l ec et ee -> If (f l) ec et ee+ Case l e alts -> Case (f l) e alts+ Do l ss -> Do (f l) ss+ MDo l ss -> MDo (f l) ss+ Tuple l es -> Tuple (f l) es+ TupleSection l mes -> TupleSection (f l) mes+ List l es -> List (f l) es+ Paren l e -> Paren (f l) e+ LeftSection l e qop -> LeftSection (f l) e qop+ RightSection l qop e -> RightSection (f l) qop e+ RecConstr l qn fups -> RecConstr (f l) qn fups+ RecUpdate l e fups -> RecUpdate (f l) e fups+ EnumFrom l e -> EnumFrom (f l) e+ EnumFromTo l ef et -> EnumFromTo (f l) ef et+ EnumFromThen l ef et -> EnumFromThen (f l) ef et+ EnumFromThenTo l ef eth eto -> EnumFromThenTo (f l) ef eth eto+ ListComp l e qss -> ListComp (f l) e qss+ ParComp l e qsss -> ParComp (f l) e qsss+ ExpTypeSig l e t -> ExpTypeSig (f l) e t+ VarQuote l qn -> VarQuote (f l) qn+ TypQuote l qn -> TypQuote (f l) qn+ BracketExp l br -> BracketExp (f l) br+ SpliceExp l sp -> SpliceExp (f l) sp+ QuasiQuote l sn se -> QuasiQuote (f l) sn se++ XTag l xn xas me es -> XTag (f l) xn xas me es+ XETag l xn xas me -> XETag (f l) xn xas me+ XPcdata l s -> XPcdata (f l) s+ XExpTag l e -> XExpTag (f l) e++ CorePragma l s e -> CorePragma (f l) s e+ SCCPragma l s e -> SCCPragma (f l) s e+ GenPragma l s n12 n34 e -> GenPragma (f l) s n12 n34 e++ Proc l p e -> Proc (f l) p e+ LeftArrApp l e1 e2 -> LeftArrApp (f l) e1 e2+ RightArrApp l e1 e2 -> RightArrApp (f l) e1 e2+ LeftArrHighApp l e1 e2 -> LeftArrHighApp (f l) e1 e2+ RightArrHighApp l e1 e2 -> RightArrHighApp (f l) e1 e2+++instance Annotated XName where+ ann (XName l s) = l+ ann (XDomName l sd sn) = l+ amap = fmap++instance Annotated XAttr where+ ann (XAttr l xn e) = l+ amap f (XAttr l xn e) = XAttr (f l) xn e++instance Annotated Bracket where+ ann (ExpBracket l e) = l+ ann (PatBracket l p) = l+ ann (TypeBracket l t) = l+ ann (DeclBracket l ds) = l+ amap f (ExpBracket l e) = ExpBracket (f l) e+ amap f (PatBracket l p) = PatBracket (f l) p+ amap f (TypeBracket l t) = TypeBracket (f l) t+ amap f (DeclBracket l ds) = DeclBracket (f l) ds++instance Annotated Splice where+ ann (IdSplice l s) = l+ ann (ParenSplice l e) = l+ amap f (IdSplice l s) = IdSplice (f l) s+ amap f (ParenSplice l e) = ParenSplice (f l) e++instance Annotated Safety where+ ann (PlayRisky l) = l+ ann (PlaySafe l b) = l+ amap = fmap++instance Annotated CallConv where+ ann (StdCall l) = l+ ann (CCall l) = l+ amap = fmap++instance Annotated OptionPragma where+ ann (LanguagePragma l ns) = l+ ann (IncludePragma l s) = l+ ann (CFilesPragma l s) = l+ ann (OptionsPragma l mt s) = l+ amap f (LanguagePragma l ns) = LanguagePragma (f l) ns+ amap f p = fmap f p++instance Annotated Activation where+ ann (ActiveFrom l k) = l+ ann (ActiveUntil l k) = l+ amap = fmap++instance Annotated Rule where+ ann (Rule l s act mrvs e1 e2) = l+ amap f (Rule l s act mrvs e1 e2) = Rule (f l) s act mrvs e1 e2++instance Annotated RuleVar where+ ann (RuleVar l n) = l+ ann (TypedRuleVar l n t) = l+ amap f (RuleVar l n) = RuleVar (f l) n+ amap f (TypedRuleVar l n t) = TypedRuleVar (f l) n t++instance Annotated WarningText where+ ann (DeprText l s) = l+ ann (WarnText l s) = l+ amap = fmap++instance Annotated Pat where+ ann p = case p of+ PVar l n -> l+ PLit l lit -> l+ PNeg l p -> l+ PNPlusK l n k -> l+ PInfixApp l pa qn pb -> l+ PApp l qn ps -> l+ PTuple l ps -> l+ PList l ps -> l+ PParen l p -> l+ PRec l qn pfs -> l+ PAsPat l n p -> l+ PWildCard l -> l+ PIrrPat l p -> l+ PatTypeSig l p t -> l+ PViewPat l e p -> l+ PRPat l rps -> l+ PXTag l xn pxas mp ps -> l+ PXETag l xn pxas mp -> l+ PXPcdata l s -> l+ PXPatTag l p -> l+ PXRPats l rps -> l+ PExplTypeArg l qn t -> l+ PQuasiQuote l sn st -> l+ PBangPat l p -> l+ amap f p = case p of+ PVar l n -> PVar (f l) n+ PLit l lit -> PLit (f l) lit+ PNeg l p -> PNeg (f l) p+ PNPlusK l n k -> PNPlusK (f l) n k+ PInfixApp l pa qn pb -> PInfixApp (f l) pa qn pb+ PApp l qn ps -> PApp (f l) qn ps+ PTuple l ps -> PTuple (f l) ps+ PList l ps -> PList (f l) ps+ PParen l p -> PParen (f l) p+ PRec l qn pfs -> PRec (f l) qn pfs+ PAsPat l n p -> PAsPat (f l) n p+ PWildCard l -> PWildCard (f l)+ PIrrPat l p -> PIrrPat (f l) p+ PatTypeSig l p t -> PatTypeSig (f l) p t+ PViewPat l e p -> PViewPat (f l) e p+ PRPat l rps -> PRPat (f l) rps+ PXTag l xn pxas mp ps -> PXTag (f l) xn pxas mp ps+ PXETag l xn pxas mp -> PXETag (f l) xn pxas mp+ PXPcdata l s -> PXPcdata (f l) s+ PXPatTag l p -> PXPatTag (f l) p+ PXRPats l rps -> PXRPats (f l) rps+ PExplTypeArg l qn t -> PExplTypeArg (f l) qn t+ PQuasiQuote l sn st -> PQuasiQuote (f l) sn st+ PBangPat l p -> PBangPat (f l) p++instance Annotated PXAttr where+ ann (PXAttr l xn p) = l+ amap f (PXAttr l xn p) = PXAttr (f l) xn p++instance Annotated RPatOp where+ ann (RPStar l) = l+ ann (RPStarG l) = l+ ann (RPPlus l) = l+ ann (RPPlusG l) = l+ ann (RPOpt l) = l+ ann (RPOptG l) = l+ amap = fmap++instance Annotated RPat where+ ann rp = case rp of+ RPOp l rp rop -> l+ RPEither l rp1 rp2 -> l+ RPSeq l rps -> l+ RPGuard l p ss -> l+ RPCAs l n rp -> l+ RPAs l n rp -> l+ RPParen l rp -> l+ RPPat l p -> l+ amap f rp = case rp of+ RPOp l rp rop -> RPOp (f l) rp rop+ RPEither l rp1 rp2 -> RPEither (f l) rp1 rp2+ RPSeq l rps -> RPSeq (f l) rps+ RPGuard l p ss -> RPGuard (f l) p ss+ RPCAs l n rp -> RPCAs (f l) n rp+ RPAs l n rp -> RPAs (f l) n rp+ RPParen l rp -> RPParen (f l) rp+ RPPat l p -> RPPat (f l) p++instance Annotated PatField where+ ann (PFieldPat l qn p) = l+ ann (PFieldPun l n) = l+ ann (PFieldWildcard l) = l+ amap f (PFieldPat l qn p) = PFieldPat (f l) qn p+ amap f (PFieldPun l n) = PFieldPun (f l) n+ amap f (PFieldWildcard l) = PFieldWildcard (f l)++instance Annotated Stmt where+ ann (Generator l p e) = l+ ann (Qualifier l e) = l+ ann (LetStmt l bs) = l+ ann (RecStmt l ss) = l+ amap f (Generator l p e) = Generator (f l) p e+ amap f (Qualifier l e) = Qualifier (f l) e+ amap f (LetStmt l bs) = LetStmt (f l) bs+ amap f (RecStmt l ss) = RecStmt (f l) ss++instance Annotated QualStmt where+ ann (QualStmt l s) = l+ ann (ThenTrans l e) = l+ ann (ThenBy l e1 e2) = l+ ann (GroupBy l e) = l+ ann (GroupUsing l e) = l+ ann (GroupByUsing l e1 e2) = l+ amap f (QualStmt l s) = QualStmt (f l) s+ amap f (ThenTrans l e) = ThenTrans (f l) e+ amap f (ThenBy l e1 e2) = ThenBy (f l) e1 e2+ amap f (GroupBy l e) = GroupBy (f l) e+ amap f (GroupUsing l e) = GroupUsing (f l) e+ amap f (GroupByUsing l e1 e2) = GroupByUsing (f l) e1 e2++instance Annotated FieldUpdate where+ ann (FieldUpdate l qn e) = l+ ann (FieldPun l n) = l+ ann (FieldWildcard l) = l+ amap f (FieldUpdate l qn e) = FieldUpdate (f l) qn e+ amap f (FieldPun l n) = FieldPun (f l) n+ amap f (FieldWildcard l) = FieldWildcard (f l)++instance Annotated Alt where+ ann (Alt l p gs bs) = l+ amap f (Alt l p gs bs) = Alt (f l) p gs bs++instance Annotated GuardedAlts where+ ann (UnGuardedAlt l e) = l+ ann (GuardedAlts l galts) = l+ amap f (UnGuardedAlt l e) = UnGuardedAlt (f l) e+ amap f (GuardedAlts l galts) = GuardedAlts (f l) galts++instance Annotated GuardedAlt where+ ann (GuardedAlt l ss e) = l+ amap f (GuardedAlt l ss e) = GuardedAlt (f l) ss e
src/Language/Haskell/Exts/ParseMonad.hs view
@@ -54,7 +54,8 @@ -- error if the parse is actually not successful. fromParseResult :: ParseResult a -> a fromParseResult (ParseOk a) = a-fromParseResult (ParseFailed loc str) = error $ "fromParseResult: Parse failed: " ++ str+fromParseResult (ParseFailed loc str) = error $ "fromParseResult: Parse failed at ("+ ++ show (srcLine loc) ++ ":" ++ show (srcColumn loc) ++ "): " ++ str instance Functor ParseResult where fmap f (ParseOk x) = ParseOk $ f x